5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DXGIのAlt+Enterによるフルスクリーンモードへの移行を無効にする方法

Last updated at Posted at 2014-07-13

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()を呼び出します。

以上です。

...

なにか間違っていたら突っ込んでください。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?