2

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

SetWindowLongウィンドウ スタイルを に設定してから に設定しようとするとWS_OVERLAPPED | WS_CAPTION | WS_SYSMENU、ウィンドウは境界線を取得しますが、direct3d デバイスは機能しなくなります。デバイスを再度リセットしても機能せず、管理対象リソースがデバイスに依存しているため、もちろん失敗します。SetWindowPosSWP_FRAMECHANGEDReset(),Release()SetWindowLong()CreateDevice()

IDirect3DDevice9::Resetボーダー付きウィンドウを作成しているときに、ウィンドウ モードに戻すにはどうすればよいですか?

4

1 に答える 1

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と失敗します。
次に、デバイスをリセットし、必要に応じて最後にリソースを再作成できます。正しく設定されていることを確認してくださいD3DPRESENT_PARAMETERSIDirect3DDevice9::Reset

于 2011-12-10T16:00:08.720 に答える