尝试按照通常情况调整D3DPRESENT_PARAMETERS。喜欢的东西:
// D3DPRESENT_PARAMETERS is already defined as md3dPP
RECT R ={0, 0, 640, 480}
AdjustwindowRect(&R, WS_OVERLAPPEDWINDOW, false);
md3dPP.BackBufferFormat = D3DFMT_UNKNOWN;
md3dPP.BackBufferWidth = 640;
md3dPP.BackBufferHeight = 480;
md3dPP.Windowed = true;
如果你愿意的话,这也可能是改变窗口风格,如一个好时机:
SetWindowLongPtr(yourWindowHandle, GWL_STYLE, WS_OVERLAPPEDWINDOW)
// must use SetWindowPos for SetWindowLongPtr changes to take effect
SetWindowPos(yourWindowHandle, HWND_TOP, 100, 100, R.right, R.bottom, SWP_NOZORDER | SWP_SHOWWINDOW);
或者,如果您正在使用全屏:
md3dPP.BackBufferFormat = D3DFMT_X8R8G8B8;
md3dPP.BackBufferWidth = 640;
md3dPP.BackBufferHeight = 480;
md3dPP.Windowed = true;
SetWindowLongPtr(yourWindowHandle, GWL_STYLE, WS_POPUP)
// must use SetWindowPos for SetWindowLongPtr changes to take effect
SetWindowPos(yourWindowHandle, HWND_TOP, 0, 0, 640, 480, SWP_NOZORDER | SWP_SHOWWINDOW);
无论哪种方式,请通过调用IDirect3DDevice9 :: Reset进行跟踪。只需确保在重置时重新初始化资源。
所以,如果你定义了这样的东西:IDirect3DDevice9 * gd3dDevice;
用途:
gd3dDevice->Reset(&md3dPP);
的
可能重复[?如何有效调整的DirectX窗口(http://stackoverflow.com/questions/8764013/how-to-resize-directx-window-efficiently) –