今天猛然注意到在MS Windows XP (Home Edition)2002版本下窗口的移动是连续的;
然而MS Windows XP (Professional Edition)2002 SP3版本下窗口移动是断开的,就是说鼠标左键按下拖动窗口时窗口并不移动,而直到鼠标放开时窗口才瞬间移动到新位置;那么问题出现了,Win32窗口应用程序在不使用MFC,即纯API编程的时候,
如果要使用DC绘图,并且自己写Paint函数,
并且我们作出如下动作(是不是很专业?)鼠标拖着我们可怜的窗口(上画有位图一张)到屏幕边缘,并且让边缘盖住窗口的一部分;
鼠标不放开,在把可怜的窗口拖回来让整个窗口可见;
那么此时,原先被屏幕边缘遮盖住的窗口部分将变成背景画刷指定颜色,而原先在那部分的位图不翼而飞;
鼠标放开,则位图又恢复完整无缺;这种情况在MS Windows XP (Professional Edition)2002 SP3下影响不大,由于窗口移动时断开的所以我们将觉察不到位图缺失;
然而在MS Windows XP (Home Edition)2002等版本下就会很悲剧的让窗口上的位图缺了一大块;以下是我的代码:请问如何改进才能避免这种情况发生(不使用MFC)?如果实在不行,请问是否有相关API或者窗口类成员函数控制这种窗口的移动机制;
能否显式地把它设定成“移动是断开的”这种移动类型?
int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
HWND hWnd;
MSG msg;
CGameApp GameApp;
if(!GameApp.CreateWnd("",hInstance,hPrevInstance,nCmdShow))
{
return FALSE;
} hWnd=GameApp.GetHWnd();
GameApp.LoadAllBitmap(); GetMessage(&msg,NULL,0,0); while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//paint放在这里:
GameApp.Paint();
}
}
UnregisterClass("LostCrystle",hInstance);
return true;
}//paint的实现:
void CGameApp::Paint()
{
m_bmpWorld1=(HBITMAP)LoadImage(NULL,"World1.bmp",IMAGE_BITMAP,WIDTH,HEIGHT,LR_LOADFROMFILE);

SelectObject(m_bufdc,m_bmpWorld1); BitBlt(m_mdc,0,0,WIDTH,HEIGHT,m_bufdc,0,0,SRCCOPY); BitBlt(m_hdc,0,0,WIDTH,HEIGHT,m_mdc,0,0,SRCCOPY);
}