다음을 통해 공유


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.

설명

참고 세션 0 프로세스에서 이 API를 호출하면 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE 반환됩니다.
 
WindowHandleFlags의 조합은 DXGI에 이전에 연결된 창에 대한 모니터링 창 메시지를 중지하도록 알립니다.

애플리케이션이 전체 화면 모드로 전환되면 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

추가 정보

DXGI 인터페이스

IDXGIFactory