win32 问题

笨笨熊_穆 2011-05-03 11:02:55
大家好, 我在编写一个例子程序的时候,发现了这么一个问题,就是我窗口上在程序运行的过程中,有打印的文字和矩形, 但是如果我切换当前窗口,意思是另一个已经运行的任何程序的窗口覆盖了当前的窗口,然后再切换回来,原来在窗口上的文字和图像都变成了空白,请问这是怎么回事情啊?

以下是一些代码:
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);
}


...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
King_hhuang 2011-05-03
  • 打赏
  • 举报
回复
你需要在WM_PAINT消息中进行重绘

你可以用向导生成一个Win32 Application的"Hello World!",看看它是怎么重绘的
cv123cv123 2011-05-03
  • 打赏
  • 举报
回复
当“另一个已经运行的任何程序的窗口覆盖了当前的窗口,然后再切换回来,原来在窗口上的文字和图像都变成了空白”是因为窗口发生了重绘,你必须在窗口过程函数中添加WM_PAINT消息进行窗口重绘
小马喝水 2011-05-03
  • 打赏
  • 举报
回复
切换当前窗口后,窗口会被重绘,如果你没有在重绘逻辑中绘图,那么窗口就会被默认清空,就是你看到的那样
jhayumu 2011-05-03
  • 打赏
  • 举报
回复
背景被擦除了,需要你重新绘制

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧