2011-10-19 36 views
2

我正在製作Direct3D應用程序,我可以使用IDirect3DDevice9::Reset和新的表示參數輕鬆地從窗口模式轉換到全屏模式。但是,當我使用相同的技巧從全屏模式切換到窗口模式時,窗口現在已經失去了邊界。轉到Direct3D中的窗口模式9

如果我嘗試做SetWindowLong到窗口樣式設置爲WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU(然後用SWP_FRAMECHANGEDSetWindowPos),窗口現在得到它的邊界,但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將會失敗。
然後您可以重置設備並根據需要重新創建任何資源。確保你正確設置D3DPRESENT_PARAMETERSIDirect3DDevice9::Reset