D3D11CreateDeviceAndSwapChainを呼び出した後を想定します。
コピペで動くようなコードではないのでご注意下さい。
// 以下の変数は設定済みと仮定
// IDXGISwapChain *psc;
// HWND hWnd;
//---------------------------------
// D3D11CreateDeviceAndSwapChain を呼び出した後のコード
HRESULT hr;
IDXGIFactory* pfac = nullptr;
hr = psc->GetParent( __uuidof( IDXGIFactory ), (void**)&pfac );
// エラー処理
if( !dxgi_error_test( hr ) ) return;
if( !pfac ) return;
// 余計な機能を無効にする設定をする。
pfac->MakeWindowAssociation( hWnd, DXGI_MWA_NO_WINDOW_CHANGES
| DXGI_MWA_NO_ALT_ENTER );
#解説とか#
##そもそものやりたいこと##
Directx11を使ってプログラムを書いてたら、
Alt+Enterで勝手にフルスクリーン化されてしまう。
DXGIがアプリケーションのメッセージ キューを監視
とかまじきもい。やめてほしい。
IDXGIFactory::MakeWindowAssociation()関数を呼び出せば
無効にできるらしいけど、この関数ってどうやったら呼び出せるの?
##DXGIとかよくわかんないし##
理解しなければならない事柄がいくつかあります。
DXGIの親子構造はここに図があります。
http://msdn.microsoft.com/ja-jp/library/ee421924(v=vs.85).aspx
IDXGISwapChainの作成方法は2種類あり、
Direct3Dを利用する場合は、
D3D11CreateDeviceAndSwapChain() を呼び出します。
Direct3Dを利用しない場合は、
IDXGIFactory::CreateSwapChain() を呼び出します。
http://msdn.microsoft.com/ja-jp/library/ee421953(v=vs.85).aspx
今回はDirectx11を使っていたので、
D3D11CreateDeviceAndSwapChain()により作成された、
IDXGISwapChain * psc オブジェクトを利用して、
設定を行わなければならないことになるはずです。
##設定する手順##
IDXGIFactory::MakeWindowAssociation()を呼び出すために、
D3D11CreateDeviceAndSwapChain()で作成した IDXGISwapChain * psc から、
親オブジェクトである IDXGIFactory を取得するために、
IDXGIObject::GetParent()を呼び出し、
取得した IDXGIFactory * pfac を利用して、
MakeWindowAssociation()を呼び出します。
以上です。
...
なにか間違っていたら突っ込んでください。