2011-10-19 13 views
2

Direct3Dアプリケーションを作成しています。IDirect3DDevice9::Resetを使用して新しいプレゼンテーションパラメータを使用してウィンドウモードからフルスクリーンモードに簡単に移行できます。しかし、同じトリックを使用してフルスクリーンからウィンドウモードにすると、ウィンドウの境界線が失われてしまいます。Direct3D 9のウィンドウモードに移動

私はWS_OVERLAPPED | WS_CAPTION | WS_SYSMENU(その後、SWP_FRAMECHANGEDSetWindowPos)にウィンドウスタイルを設定するSetWindowLongをやってみた場合、ウィンドウは現在、国境を取得していないが、Direct3Dデバイスは、もは​​や機能します。デバイスをもう一度リセットすることはできません。Reset(),の代わりにRelease()SetWindowLong()CreateDevice()の順に表示されますが、私の管理対象リソースはデバイスに依存しています。

ボーダーウィンドウを作成中にIDirect3DDevice9::Resetをウィンドウモードに戻すにはどうすればよいですか?

答えて

0

まず、あなたは、ウィンドウのプロパティを変更する必要があります。

SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW); 

if (new_pos_size) 
{ 
    // if you want new position (pos_x, pos_y) and size (width, height) 
    UINT flags = SWP_FRAMECHANGED | SWP_SHOWWINDOW; 
    SetWindowPos(hWnd, HWND_NOTOPMOST, pos_x, pos_y, width, height, flags); 
} 
else 
{ 
    UINT flags = SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED | SWP_SHOWWINDOW; 
    SetWindowPos(hWnd, 0, 0, 0, 0, 0, flags); 
} 

次はあなたがデフォルトのプール内に作成されたすべてのリソースを解放する必要があります - D3DPOOL_DEFAULTは(それがD3DPOOL_MANAGED可能な場合を使用することをお勧めします)。そうしないと、IDirect3DDevice9::Resetは失敗します。
次に、デバイスをリセットして、必要に応じてすべてのリソースを再作成することができます。 IDirect3DDevice9::ResetD3DPRESENT_PARAMETERSを正しく設定してください。

関連する問題