IDXGIFactory::MakeWindowAssociation 方法 (dxgi.h)

允許 DXGI 監視應用程式訊息佇列中的 alt-enter 鍵順序 (,這會導致應用程式從視窗切換為全螢幕,反之亦然) 。

語法

HRESULT MakeWindowAssociation(
  HWND WindowHandle,
  UINT Flags
);

參數

WindowHandle

類型: HWND

要監視之視窗的控制碼。 此參數可以是 Null;但只有在 Flags 也是 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,然後從交換鏈結重新取得背景緩衝區, (s) 。 這讓交換鏈結 () 有機會調整背景緩衝區的大小,以及/或重新建立它們以啟用全螢幕翻轉作業。 如果應用程式未執行此順序,DXGI 仍會進行全螢幕/視窗轉換,但可能會強制使用延展作業 (,因為後端緩衝區可能不是正確的大小) ,因此效率可能較低。 即使不需要延展,簡報可能不是最佳的,因為背景緩衝區可能不會直接與前緩衝區交換。 因此,一律建議在WM_SIZE上呼叫 ResizeBuffers ,因為WM_SIZE一律會在全螢幕轉換期間傳送。

當視窗化時,應用程式可以選擇時,將視窗的工作區大小限制為其熟悉呈現的大小。 完全彈性的應用程式不會有這類限制,但 UI 元素或其他設計考慮當然可以讓這項彈性無法運作。 如果應用程式進一步選擇將其視窗的工作區限制為只符合支援全螢幕解析度的工作區,則應用程式可以欄位WM_SIZING,然後針對 IDXGIOutput::FindClosestMatchingMode進行檢查。 如果找到相符模式,請允許調整大小。 (可以從 IDXGISwapChain::GetContainingOutput 擷取 IDXGIOutput。沒有桌面拓撲的後續變更,這會是欄位欄位輸入時所選擇的相同輸出,而且已針對該交換鏈結開始全螢幕模式。)

想要處理模式變更或 Alt+Enter 本身的應用程式應該在交換鏈結建立之後,呼叫 MakeWindowAssociation 與DXGI_MWA_NO_WINDOW_CHANGES旗標。 如果為非Null則 WindowHandle引數會指定特定目標HWND之所有交換鏈結的 DXGI 執行時間不會處理應用程式訊息佇列。 在交換鏈建立之後呼叫 MakeWindowAssociation 與DXGI_MWA_NO_WINDOW_CHANGES旗標,可確保 DXGI 不會干擾應用程式的視窗模式變更或 Alt+Enter 的處理。

您必須在與目標 HWND 交換鏈結相關聯的處理站物件上呼叫 MakeWindowAssociation 方法, (s) 。 您可以藉由在交換鏈結上呼叫 IDXGIObject::GetParent 方法, (s) 來尋找處理站來保證。 以下是執行此作業的程式碼範例。

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