IDXGIFactory::MakeWindowAssociation
ウィンドウ モードおよびフルスクリーン モード間でアプリケーションを切り替える Alt + Enter キー操作について、アプリケーションのメッセージ キューの監視を DXGI に許可します。
HRESULT
MakeWindowAssociation(
HWND WindowHandle,
UINT Flags
);
パラメータ
- WindowHandle
監視対象のウィンドウのハンドル。フラグも 0 の場合のみ、このパラメーターには NULL を指定できます。 - Flags
次の値から 1 つまたは複数を指定できます。- DXGI_MWA_NO_WINDOW_CHANGES - DXGI がアプリケーションのメッセージ キューを監視しないようにします。これにより、DXGI はモードの変更に応答することができなくなります。
- DXGI_MWA_NO_ALT_ENTER - DXGI が Alt + Enter キー操作に応答しないようにします。
- DXGI_MWA_NO_PRINT_SCREEN - DXGI が PrintScreen キー操作に応答しないようにします。
戻り値
hWnd が無効の場合は DXGIERR_INVALID_CALL。または、E_OUTOFMEMORY。
解説
WindowHandle と Flags の組み合わせによって、以前に関連付けられたウィンドウに対するウィンドウ メッセージの監視を中断するよう DXGI に通知できます。
アプリケーションがフルスクリーン モードに切り替わった場合、DXGI は現在のバック バッファー以上のサイズのフルスクリーン解像度を選び、サポートする最小解像度とします。
いくつかの変更を行うことによって、アプリケーションはより効率的にウィンドウ モードからフルスクリーン モードへの切り替えを行うことができます。たとえば、WM_SIZE メッセージに対して、アプリケーションは未処理のスワップ チェーン バック バッファーをすべて解放し、IDXGISwapChain::ResizeBackBuffers を呼び出して、スワップ チェーンからそれらのバック バッファーを再取得すべきです。これにより、スワップ チェーンにバック バッファーのサイズ変更や、フルスクリーン切り替え処理を行う機会が与えられます。アプリケーションがこのシーケンスを実行しない場合でも、DXGI はフルスクリーン モードとウィンドウ モード間の切り替えを行うことはできますが、バック バッファーのサイズが正しくないために強制的な伸縮操作を必要とする場合があり、効率が低下する可能性があります。たとえ伸縮の必要がなくても、バック バッファーを直接フロント バッファーと置き換えることができないために、最適な表示が行われないことがあります。このため、常にフルスクリーン切り替え中に送信される WM_SIZE に対する ResizeBuffers の呼び出しが常に推奨されます。
ウィンドウ モードの間に、アプリケーションはウィンドウのクライアント領域のサイズを、問題なくレンダリングできるサイズに制限することを選択できます。十分に柔軟なアプリケーションにはこのような制限を設定する必要はありませんが、UI 要素やその他の設計上考慮すべき要素には、もちろんこの柔軟性を許容できないようにすることが可能です。アプリケーションが、そのウィンドウのクライアント領域を、サポートされるフルスクリーン解像度と一致する解像度だけに制限することをさらに選択した場合、アプリケーションは WM_SIZING を処理し、IDXGIOutput::FindClosestMatchingMode に照らしてチェックすることができます。そこで、一致するモードが見つかれば、サイズを変更することが可能です。(IDXGIOutput は IDXGISwapChain::GetContainingOutput から取得できます。デスクトップ トポロジに対する後続の変更がなければ、この出力は、Alt + Enter キー操作が処理され、そのスワップ チェーンに対してフルスクリーン モードが開始されるときに選択される出力と同じです。)
要件
ヘッダー: DXGI.h 宣言
ライブラリ: DXGI.lib 内容