IDXGIFactory::MakeWindowAssociation 메서드(dxgi.h)
DXGI가 alt-enter 키 시퀀스에 대한 애플리케이션의 메시지 큐를 모니터링할 수 있습니다(이로 인해 애플리케이션이 창에서 전체 화면으로 전환되거나 그 반대로 전환됨).
구문
HRESULT MakeWindowAssociation(
HWND WindowHandle,
UINT Flags
);
매개 변수
WindowHandle
형식: HWND
모니터링할 창의 핸들입니다. 이 매개 변수는 NULL일 수 있습니다. 플래그 도 0인 경우에만 가능합니다.
Flags
형식: UINT
다음 값 중 하나 이상입니다.
- DXGI_MWA_NO_WINDOW_CHANGES - DXGI가 애플리케이션 메시지 큐를 모니터링하지 못하도록 방지합니다. 이렇게 하면 DXGI가 모드 변경에 응답할 수 없습니다.
- DXGI_MWA_NO_ALT_ENTER - DXGI가 alt-enter 시퀀스에 응답하지 않도록 합니다.
- DXGI_MWA_NO_PRINT_SCREEN - DXGI가 인쇄 화면 키에 응답하지 않도록 방지합니다.
반환 값
형식: HRESULT
WindowHandle이 잘못되었거나 E_OUTOFMEMORY 경우 DXGI_ERROR_INVALID_CALL.
설명
애플리케이션이 전체 화면 모드로 전환되면 DXGI는 전체 화면 해상도를 현재 백 버퍼 크기와 크거나 같은 크기로 지원되는 가장 작은 해상도로 선택합니다.
애플리케이션은 창에서 전체 화면으로의 전환을 보다 효율적으로 만들기 위해 몇 가지 변경을 수행할 수 있습니다. 예를 들어 WM_SIZE 메시지에서 애플리케이션은 미해결 스왑 체인 백 버퍼를 해제하고 IDXGISwapChain::ResizeBuffers를 호출한 다음 스왑 체인에서 백 버퍼를 다시 획득해야 합니다. 이렇게 하면 스왑 체인에서 백 버퍼의 크기를 조정하거나 다시 만들어 전체 화면 대칭 이동 작업을 사용하도록 설정할 수 있습니다. 애플리케이션이 이 시퀀스를 수행하지 않는 경우 DXGI는 여전히 전체 화면/창 전환을 수행하지만 백 버퍼가 올바른 크기가 아닐 수 있으므로 스트레치 작업을 강제로 사용해야 할 수 있습니다. 이는 효율성이 떨어질 수 있습니다. 스트레치가 필요하지 않더라도 백 버퍼를 전면 버퍼와 직접 교환할 수 없기 때문에 프레젠테이션이 최적이 아닐 수 있습니다. 따라서 WM_SIZE 항상 전체 화면 전환 중에 전송되므로 WM_SIZE ResizeBuffers 에 대한 호출이 항상 권장됩니다.
창이 있는 동안 애플리케이션이 선택하는 경우 창의 클라이언트 영역 크기를 편안한 렌더링 크기로 제한할 수 있습니다. 완전히 유연한 애플리케이션은 이러한 제한을 하지 않지만 UI 요소 또는 기타 디자인 고려 사항은 물론 이러한 유연성을 불가능하게 만들 수 있습니다. 애플리케이션이 창의 클라이언트 영역을 지원되는 전체 화면 해상도와 일치하는 영역으로만 제한하도록 선택하면 애플리케이션은 WM_SIZING 필드로 이동한 다음 IDXGIOutput::FindClosestMatchingMode에 대해 검사 수 있습니다. 일치하는 모드가 발견되면 크기 조정을 허용합니다. IDXGIOutput은 IDXGISwapChain::GetContainingOutput에서 검색할 수 있습니다. 데스크톱 토폴로지의 후속 변경 내용이 없으면 alt-enter가 필드로 표시되고 해당 스왑 체인에 대해 전체 화면 모드가 시작될 때 선택되는 것과 동일한 출력이 됩니다.)
모드 변경 또는 Alt+Enter 자체를 처리하려는 애플리케이션은 스왑 체인을 만든 후 DXGI_MWA_NO_WINDOW_CHANGES 플래그를 사용하여 MakeWindowAssociation 을 호출해야 합니다. NULL이 아닌 경우 WindowHandle 인수는 특정 대상 HWND의 모든 스왑 체인에 대해 DXGI 런타임에서 애플리케이션 메시지 큐를 처리하지 않도록 지정합니다. 스왑 체인을 만든 후 DXGI_MWA_NO_WINDOW_CHANGES 플래그를 사용하여 MakeWindowAssociation 을 호출하면 DXGI가 애플리케이션의 창 모드 변경 또는 Alt+Enter 처리를 방해하지 않습니다.
대상 HWND 스왑 체인과 연결된 팩터리 개체에서 MakeWindowAssociation 메서드를 호출해야 합니다. 스왑 체인에서 IDXGIObject::GetParent 메서드를 호출하여 팩터리를 찾을 수 있습니다. 이 작업을 수행하는 코드 예제는 다음과 같습니다.
void MakeWindowAssociationWithLocatedFactory(
winrt::com_ptr<IDXGISwapChain> const& swapChain,
HWND hWnd,
UINT flags)
{
winrt::com_ptr<IDXGIFactory1> factory;
factory.capture(swapChain, &IDXGISwapChain::GetParent);
factory->MakeWindowAssociation(hWnd, flags);
}
Windows 스토어 앱에 대한 참고 사항
Windows 스토어 앱이 MakeWindowAssociation을 호출하면 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE 함께 실패합니다.Microsoft Win32 애플리케이션은 MakeWindowAssociation 을 사용하여 전체 화면에 대한 Alt+Enter 키 조합 및 인쇄 화면 동작을 통해 전체 화면 전환을 제어할 수 있습니다. Windows 스토어 앱의 경우 DXGI가 전체 화면 전환을 수행할 수 없으므로 Windows 스토어 앱은 전체 화면 전환을 제어할 방법이 없습니다.
요구 사항
대상 플랫폼 | Windows |
헤더 | dxgi.h |
라이브러리 | DXGI.lib |