[Win32] 用WS_POPUP创建的窗口化全屏的有关问题.

[Win32] 用WS_POPUP创建的窗口化全屏的问题..
很多游戏都提供一种叫做"窗口化全屏"的显示模式,就是本质上是窗口模式,但是把窗口铺满全屏,
要做到这一点,只需要:
SetWindowLong(hWnd, GWL_STYLE, WS_POPUP);
然后用SetWindowPos()设置下位置即可,

可是当我试图从窗口化全屏模式切换回800×600尺寸的桌面模式时,窗口后面的背景没有得到擦除,像图中这样:
[Win32] 用WS_POPUP创建的窗口化全屏的有关问题.

完整代码:

void MainLoop(HWND hWnd)
{
if (GetAsyncKeyState(VK_F1) & 0x8000)
{
DWORD newWndStyle = newWndStyle = (WS_POPUP | WS_MINIMIZEBOX | WS_SYSMENU) & ~WS_VISIBLE;
SetWindowLong(hWnd, GWL_STYLE, newWndStyle);

RECT rcWnd = { 0, 0, 1366, 768 };
AdjustWindowRect(&rcWnd, newWndStyle, FALSE);

int x = (GetSystemMetrics(SM_CXSCREEN) - (rcWnd.right-rcWnd.left)) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - (rcWnd.bottom-rcWnd.top)) / 2;
UINT flag = 0;
SetWindowPos(hWnd, HWND_NOTOPMOST, x, y, rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top, flag|SWP_NOACTIVATE|SWP_SHOWWINDOW);

Sleep(500);
}

if (GetAsyncKeyState(VK_F2) & 0x8000)
{
DWORD newWndStyle = newWndStyle = WS_OVERLAPPEDWINDOW & (~WS_MAXIMIZEBOX) & (~WS_SIZEBOX);
SetWindowLong(hWnd, GWL_STYLE, newWndStyle);

RECT rcWnd = { 0, 0, 800, 600 };
AdjustWindowRect(&rcWnd, newWndStyle, FALSE);

int x = (GetSystemMetrics(SM_CXSCREEN) - (rcWnd.right-rcWnd.left)) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - (rcWnd.bottom-rcWnd.top)) / 2;
UINT flag = 0;
SetWindowPos(hWnd, HWND_NOTOPMOST, x, y, rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top, flag|SWP_NOACTIVATE|SWP_SHOWWINDOW);

Sleep(500);
}
}


如何才能把全屏切换回窗口所留下的背景擦除掉?

------解决方案--------------------
本帖最后由 VisualEleven 于 2013-10-21 16:31:47 编辑
随便改了下,也是可以实现的!
if (GetAsyncKeyState(VK_F1) & 0x8000)
{
long Style = ::GetWindowLong(hWnd, GWL_STYLE)& ~WS_CAPTION;
//DWORD newWndStyle = (WS_POPUP 
------解决方案--------------------
 WS_MINIMIZEBOX 
------解决方案--------------------
 WS_SYSMENU) & (~WS_VISIBLE);
SetWindowLong(hWnd, GWL_STYLE, Style);


int x = GetSystemMetrics(SM_CXSCREEN) ;
int y = GetSystemMetrics(SM_CYSCREEN) ;
UINT flag = 0;
SetWindowPos(hWnd, NULL, 0, 0, x, y, NULL);

Sleep(500);
}

if (GetAsyncKeyState(VK_F2) & 0x8000)
{
DWORD newWndStyle = ::GetWindowLong(hWnd, GWL_STYLE) ^WS_CAPTION;
SetWindowLong(hWnd, GWL_STYLE, newWndStyle);

RECT rcWnd = { 0, 0, 800, 600 };
AdjustWindowRect(&rcWnd, newWndStyle, FALSE);

int x = (GetSystemMetrics(SM_CXSCREEN) - (rcWnd.right-rcWnd.left)) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - (rcWnd.bottom-rcWnd.top)) / 2;
UINT flag = 0;
SetWindowPos(hWnd, NULL, x, y, rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top, NULL);

Sleep(500);
}