OnTimer无效(WM_PAINT消息过多)
2010-12-18 16:53
253 查看
这是个windows编程问题。
第一种情况显示出来的字很正常。
case WM_PAINT:
gdc = BeginPaint (hwnd, &ps);
TextOut (gdc, 0, 0, s, strlen (s));
EndPaint (hwnd, &ps);
break;
第二种情况显示的字不停闪烁。
case WM_PAINT:
gdc = GetDC (hwnd);
TextOut (gdc, 0, 0, s, strlen (s));
ReleaseDC (hwnd, gdc);
break;
BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。
GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出 WM_PAINT 时 ,无效区域仍然存在。系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。CPU占有率很高,这时候就无法处理OnTimer消息了
第一种情况显示出来的字很正常。
case WM_PAINT:
gdc = BeginPaint (hwnd, &ps);
TextOut (gdc, 0, 0, s, strlen (s));
EndPaint (hwnd, &ps);
break;
第二种情况显示的字不停闪烁。
case WM_PAINT:
gdc = GetDC (hwnd);
TextOut (gdc, 0, 0, s, strlen (s));
ReleaseDC (hwnd, gdc);
break;
BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效。
GetDC()和ReleaseDC()并不删除也不能使无效区域有效,因此当程序跳出 WM_PAINT 时 ,无效区域仍然存在。系统就回不断发送WM_PAINT消息,于是程序不断处理WM_PAINT消息。CPU占有率很高,这时候就无法处理OnTimer消息了
相关文章推荐
- 关于WM_PAINT消息中只重绘无效区的问题
- SDK编程中有效区域与无效区域的盲区WM_PAINT消息何时发送的。。。
- SDK编程中有效区域与无效区域的盲区WM_PAINT消息何时发送的。。。
- SDK编程中有效区域与无效区域的盲区WM_PAINT消息何时发送的。。。
- windows 编程随笔——输出文本>>WM_PAINT消息|有效矩形和无效矩形
- WM_PAINT中应该用BeginPaint与EndPaint这两个api,它们的功能正是使无效区域恢复(所以WM_PAINT里即使什么都不做,也必须写上BeginPaint与EndPaint)——Delphi里WM_PAINT消息的三个走向都做到了这一点
- WM_Paint消息小結
- WM_PAINT消息处理过程
- WM_PAINT消息小结
- (转)WM_Paint 消息详解
- duilib CPaintManagerUI的WM_PAINT消息
- DoModal 的调用会发送 WM_INITDIALOG 消息 WM_ERASEBKG 先于WM_PAINT
- WM_PAINT 和 WM_ERASEBKGND 消息的区别
- 深度探索WM_PAINT消息(K_ECKEL转自微软高校博客K_ECKEL'S MINDVIEW)
- WM_Paint 消息详解
- 在VC++项目中为MDI主框架窗口添加位图(通过截获MDICLIENT的WM_PAINT消息)
- WM_PAINT 和 WM_ERASEBKGND 消息的区别 .
- 无效区域 更新区域 重画 WM_PAINT 的关系和机制(转载总结)
- Windows程序设计零基础自学_3_Windows程序的显示和更新_之获取设备内容句柄_非WM_PAINT消息期间绘制显示区域
- Windows 编程[8] - WM_PAINT 消息