IDXGIFactory_MakeWindowAssociation

DXGI がアプリケーションのメッセージキューを監視して Alt+Enter キーシーケンス (アプリケーションをウィンドウ表示とフルスクリーンの間で切り替える) を検出することを許可する。

IDXGIFactory_MakeWindowAssociation this, WindowHandle, Flags

this : [comobj] IDXGIFactory インターフェースの COM オブジェクト変数
WindowHandle : [intptr] 型: HWND 監視対象のウィンドウのハンドル。このパラメータは NULL にできるが、その場合は *Flags* も 0 でなければならない。
Flags : [int] 型: UINT

(プラグイン / モジュール : com_misc.dll)

解説

DXGI がアプリケーションのメッセージキューを監視して Alt+Enter キーシーケンス
(アプリケーションをウィンドウ表示とフルスクリーンの間で切り替える) を検出することを許可する。

[戻り値]
型: HRESULT WindowHandle が無効な場合は DXGI_ERROR_INVALID_CALL、または
E_OUTOFMEMORY。

[備考]
注: このAPIをセッション 0 プロセスで呼び出すと DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
を返す。WindowHandle と Flags
の組み合わせにより、以前に関連付けられたウィンドウのウィンドウメッセージ監視を停止するよう 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 を呼ぶべきである。WindowHandle 引数が非 NULL の場合、DXGI
ランタイムが特定の対象 HWND
のすべてのスワップチェーンについてアプリケーションのメッセージキューを処理しないことを指定する。スワップチェーン生成後に
DXGI_MWA_NO_WINDOW_CHANGES フラグを付けて MakeWindowAssociation を呼ぶことで、DXGI
がアプリケーションによるウィンドウモード変更や Alt+Enter
の処理に干渉しないことを保証できる。**MakeWindowAssociation** メソッドは、対象 HWND
スワップチェーンに関連付けられたファクトリオブジェクトに対して呼び出す必要がある。これはスワップチェーンに対して
[IDXGIObject::GetParent](/windows/win32/api/dxgi/nf-dxgi-idxgiobject-getparent)
メソッドを呼び出してファクトリを特定することで保証できる。以下はそのコード例である。
(以下省略)

情報

プラグイン / モジュールcom_misc.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の com_misc.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_com_misc_gen2.hs