DirectShow 보유 사용이 금지되고 있는 인터페이스 IDirectDrawFactory CreateDirectDraw [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
주 : IDirectDrawFactory 인터페이스의 사용은 피하는 것.
DirectDraw 개체를 생성 해, 그 IDirectDraw 인터페이스의 포인터를 얻어온다.
구문
STDMETHOD CreateDirectDraw(
GUID *pGUID,
HWND hWnd,
DWORD dwCoopLevelFlags,
DWORD dwReserved,
IUnknown *pUnkOuter,
IDirectDraw **ppDirectDraw
);
파라미터
pGUID
[out] 생성 하는 드라이버를 나타내는 글로벌 일의 식별자 (GUID)의 포인터. 액티브한 디스플레이 드라이버를 지정하려면 , NULL 를 설정한다. 또, 디버그를 위해서(때문에) 액티브한 디스플레이 드라이버의 동작을 제한하려면 , 다음의 플래그의 1 개를 건네준다.
값 | 설명 |
DDCREATE_EMULATIONONLY | 모든 기능을 DirectDraw 개체로 에뮬레이트 한다. 하드웨어가 지원 하는 기능은 이용하지 않는다. |
DDCREATE_HARDWAREONLY | 하드웨어가 지원 하지 않는 기능을 DirectDraw 개체로 에뮬레이트 하지 않는다. 지원되지 않은 기능이 필요한 메서드를 호출하면, 실패해, DDERR_UNSUPPORTED (조작이 지원하지 않는다)가 반환된다. |
hWnd
[in] 애플리케이션의 윈도우 핸들.
dwCoopLevelFlags
[in] 애플리케이션의 최상정도 동작. 이하의 플래그를 1 개 이상 지정한다.
값 | 설명 |
DDSCL_ALLOWMODEX | 모드 X 디스플레이 모드를 사용 가능하게 한다. 이 플래그는, DDSCL_EXCLUSIVE 플래그 및 DDSCL_FULLSCREEN 플래그와 함께 사용해야 한다. |
DDSCL_ALLOWREBOOT | 애플리케이션이 풀 스크린 모드 또한 배타 모드 때에, 사용자가 Ctrl + Alt + Del 키를 눌러 재부팅 할 수 있도록(듯이) 한다. |
DDSCL_EXCLUSIVE | 배타 레벨을 요구한다. 이 플래그는, DDSCL_FULLSCREEN 플래그와 함께 사용해야 한다. 풀 스크린 또한 배타 협조 레벨에서는, 하드웨어를 최대한 이용할 수 있다. 이 모드에서는, 커스텀 팔레트나 동적 팔레트의 설정, 디스플레이 해상도의 변경, 메모리의 압축, 페이지 플립핑의 실현을 할 수 있다. 배타 (풀 스크린) 모드에서는, 다른 애플리케이션으로부터, 표면을 할당할 수도 있어 DirectDraw 나 GDI 를 사용할 수도 있다. 다만, 배타 모드에서는, 그 때 배타 액세스를 가지고 있는 애플리케이션 이외의 애플리케이션으로부터, 디스플레이 모드나 팔레트를 변경할 수 없다. |
DDSCL_FULLSCREEN | 배타 모드의 소사용자가 1차 표면 전체를 제어하는 것을 나타낸다. 이 플래그는, DDSCL_EXCLUSIVE 플래그와 함께 사용해야 한다. |
DDSCL_NORMAL | 애플리케이션이 보통의 Microsoft® Windows® 애플리케이션으로서 동작하는 것을 나타낸다. 이 플래그를 DDSCL_ALLOWMODEX, DDSCL_EXCLUSIVE, 또는 DDSCL_FULLSCREEN 플래그와 함께 사용할 수 없다. |
DDSCL_NOWINDOWCHANGES | 애플리케이션이 액티브하게 되었을 때에, DirectDraw 가 애플리케이션 윈도우를 최소화 또는 복원할 수 없는 것을 나타낸다. |
dwReserved
[in] 예약이 끝난 상태. NULL 이어야 한다.
pUnkOuter
[in] 예약이 끝난 상태. NULL 이어야 한다.
ppDirectDraw
[out] IDirectDraw 인터페이스의 포인터 주소.
반환값
성공했을 경우는, DD_OK 를 돌려준다. 그 이외의 경우는, 다음의 몇개의 에러값을 돌려준다.
반환 코드 | 설명 |
DDERR_DIRECTDRAWALREADYCREATED | 이 드라이버를 나타내는 DirectDrawEx 개체가, 이 프로세스로 이미 생성 되고 있는 것을 나타낸다. |
DDERR_GENERIC | 미정도리의 에러 상태이다. |
DDERR_INVALIDDIRECTDRAWGUID | 이 메서드에 건네진 GUID 가, DirectDrawEx 드라이버의 유효한 식별자가 아니다. |
DDERR_INVALIDPARAMS | 메서드에 건네진 1 개 이상의 인수가 부정하다. |
DDERR_NODIRECTDRAWHW | 하드웨어 전용 DirectDrawEx 개체를 생성 할 수 없다. 드라이버는 하드웨어를 지원 하지 않는다. |
DDERR_UNSUPPORTED | 처리가 DirectDraw 로 지원하지 않는다. |
E_OUTOFMEMORY | 메모리 부족을 위해, DirectDraw 개체를 생성 할 수 없다. |
주의
이 메서드는, DirectDraw 의 DirectDrawCreate 함수를 사용해 DirectDraw 개체를 생성 하는 것과 같은 방법으로, DirectDraw 개체를 생성 한다. 게다가IDirectDraw2::SetCooperativeLevel 메서드가 협조 레벨을 설정하는 것과 같은 방법으로, 협조 레벨을 설정한다. 다만,IDirectDrawFactory::CreateDirectDraw 메서드의 호출이 성공하면 DirectDraw 개체가 생성 될 뿐만 아니라, DirectDraw 개체가 공개하는 IUnknown 인터페이스와 IDirectDraw 인터페이스의 포인터를 얻을 수 있다. 현재는, 애플리케이션으로부터 DirectDraw 개체에 조회하는 것에 의해,IDirectDraw3 인터페이스의 포인터 주소를 취득할 수 있다.
참조