怎样忽略WM_PAINT消息

bigtree21cn 2006-06-29 07:49:16
问题1:
我在消息循环处,使用
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_PAINT)
continue;
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
导致WM_PAINT不断发送,进入死循环。
我怎样从消息队列永久移除这条WM_PAINT消息呢?

问题2:
发送什么消息,可以重绘系统菜单区(不是客户区)?

谢谢!
...全文
284 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一剑 2006-06-30
  • 打赏
  • 举报
回复
问题1:
如果不处理WM_PAINT讯息(这是很罕见的),它们必须被传送给DefWindowProc。DefWindowProc只是依次呼叫BeginPaint和EndPaint,以使显示区域有效。

问题2:
发送什么消息,可以重绘系统菜单区(不是客户区)?
WM_NCPAINT
xqk 2006-06-30
  • 打赏
  • 举报
回复
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_PAINT)
continue;
}

当然会进入死循环了,你 break 试试
cczlp 2006-06-30
  • 打赏
  • 举报
回复
2:
WM_NCPAINT
syy64 2006-06-30
  • 打赏
  • 举报
回复
2、空处理消息。
DentistryDoctor 2006-06-29
  • 打赏
  • 举报
回复
if (msg.message == WM_PAINT)
{
PAINTSTRUCT ps;
::BeginPaint(msg.hwnd, &ps);
::EndPaint(msg.hwnd, &ps);
continue;
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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