大家好, 我在编写一个例子程序的时候,发现了这么一个问题,就是我窗口上在程序运行的过程中,有打印的文字和矩形, 但是如果我切换当前窗口,意思是另一个已经运行的任何程序的窗口覆盖了当前的窗口,然后再切换回来,原来在窗口上的文字和图像都变成了空白,请问这是怎么回事情啊?以下是一些代码:
        wcex.style         = CS_VREDRAW | CS_HREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MLTITHRD);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_MLTITHRD));
××××××××××××××××××××××××××××××××××××××××××××××××××            hWnd = CreateWindow(szWindowClass,
   szTitle, 
   WS_OVERLAPPED | WS_SYSMENU,
   0, 0,400,250, 
   NULL, 
   NULL, 
   hInstance, 
   NULL);××××××××××××××××××××××××××××××××××××××
 ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
×××××××××××××××××××××××××××××××××××××××
void ThreadProc(DWORD *ThreadArg)
{
RECT rect;
HDC  hDC;
HANDLE hBrush, hOldBrush;
DWORD dwThreadHits = 0;
char  cBuf[80];
int   iThreadNo, i; GetClientRect (_hWnd, &rect);
hDC = GetDC (_hWnd);
hBrush = CreateSolidBrush(RGB(*(ThreadArg), *(ThreadArg), *(ThreadArg)));  
hOldBrush = SelectObject(hDC, hBrush); switch (*ThreadArg) {
 case HIGHEST_THREAD   : iThreadNo = 0; break;
 case ABOVE_AVE_THREAD : iThreadNo = 1; break;
 case NORMAL_THREAD    : iThreadNo = 2; break;
 case BELOW_AVE_THREAD : iThreadNo = 3; break;
 case LOWEST_THREAD    : iThreadNo = 4; break;
} wsprintf((LPWSTR)cBuf, _T("T%d"), iThreadNo);
TextOut(hDC, *(ThreadArg), rect.bottom-150, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf));
wsprintf((LPWSTR)cBuf,  _T("P=%d"), GetThreadPriority(_hThread[iThreadNo]));
TextOut(hDC, *(ThreadArg), rect.bottom-130, (LPWSTR)cBuf, lstrlen((LPWSTR)cBuf)); do
{
dwThreadHits++;  
Rectangle(hDC, *(ThreadArg), rect.bottom-(dwThreadHits/10),
*(ThreadArg)+0x40, rect.bottom); if (_uDelayType == SLEEPDELAY)
Sleep(10);
else if (_uDelayType == FORLOOPDELAY)
for (i=0; i<30000; i++);
else // _uDelayType == NODELAY)
{  
}
} while (dwThreadHits < 1000); hBrush = SelectObject(hDC, hOldBrush);
DeleteObject (hBrush);
ReleaseDC (_hWnd, hDC);
}

解决方案 »

  1.   

    当“另一个已经运行的任何程序的窗口覆盖了当前的窗口,然后再切换回来,原来在窗口上的文字和图像都变成了空白”是因为窗口发生了重绘,你必须在窗口过程函数中添加WM_PAINT消息进行窗口重绘
      

  2.   

    你需要在WM_PAINT消息中进行重绘你可以用向导生成一个Win32 Application的"Hello World!",看看它是怎么重绘的