次の方法で共有


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。

解説 

WindowHandleFlags の組み合わせによって、以前に関連付けられたウィンドウに対するウィンドウ メッセージの監視を中断するよう DXGI に通知できます。

アプリケーションがフルスクリーン モードに切り替わった場合、DXGI は現在のバック バッファー以上のサイズのフルスクリーン解像度を選び、サポートする最小解像度とします。

いくつかの変更を行うことによって、アプリケーションはより効率的にウィンドウ モードからフルスクリーン モードへの切り替えを行うことができます。たとえば、WM_SIZE メッセージに対して、アプリケーションは未処理のスワップ チェーン バック バッファーをすべて解放し、IDXGISwapChain::ResizeBackBuffers を呼び出して、スワップ チェーンからそれらのバック バッファーを再取得すべきです。これにより、スワップ チェーンにバック バッファーのサイズ変更や、フルスクリーン切り替え処理を行う機会が与えられます。アプリケーションがこのシーケンスを実行しない場合でも、DXGI はフルスクリーン モードとウィンドウ モード間の切り替えを行うことはできますが、バック バッファーのサイズが正しくないために強制的な伸縮操作を必要とする場合があり、効率が低下する可能性があります。たとえ伸縮の必要がなくても、バック バッファーを直接フロント バッファーと置き換えることができないために、最適な表示が行われないことがあります。このため、常にフルスクリーン切り替え中に送信される WM_SIZE に対する ResizeBuffers の呼び出しが常に推奨されます。

ウィンドウ モードの間に、アプリケーションはウィンドウのクライアント領域のサイズを、問題なくレンダリングできるサイズに制限することを選択できます。十分に柔軟なアプリケーションにはこのような制限を設定する必要はありませんが、UI 要素やその他の設計上考慮すべき要素には、もちろんこの柔軟性を許容できないようにすることが可能です。アプリケーションが、そのウィンドウのクライアント領域を、サポートされるフルスクリーン解像度と一致する解像度だけに制限することをさらに選択した場合、アプリケーションは WM_SIZING を処理し、IDXGIOutput::FindClosestMatchingMode に照らしてチェックすることができます。そこで、一致するモードが見つかれば、サイズを変更することが可能です。(IDXGIOutput は IDXGISwapChain::GetContainingOutput から取得できます。デスクトップ トポロジに対する後続の変更がなければ、この出力は、Alt + Enter キー操作が処理され、そのスワップ チェーンに対してフルスクリーン モードが開始されるときに選択される出力と同じです。)

アプリケーションでモードの変更を扱う場合や Alt + Enter キー操作を実行する場合は、スワップチェーンの作成後、DXGI_MWA_NO_WINDOW_CHANGES フラグを指定して MakeWindowAssociation を呼び出す必要があります。WindowHandle 引数に NULL 以外の値を指定すると、特定のターゲット HWND のすべてのスワップチェーンで、アプリケーションのメッセージ キューが DXGI ランタイムで扱われなくなります。スワップチェーンの作成後、DXGI_MWA_NO_WINDOW_CHANGES フラグを指定して MakeWindowAssociation を呼び出すと、アプリケーションによるウィンドウ モードの取り扱いも Alt + Enter キー操作も、DXGI の影響を受けなくなります。

要件

ヘッダー: DXGI.h 宣言

ライブラリ: DXGI.lib 内容

関連項目

DXGI のインターフェイス