问题1:
我在消息循环处,使用
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
   if (msg.message == WM_PAINT)
continue;
   ::TranslateMessage(&msg); 
   ::DispatchMessage(&msg);
}
导致WM_PAINT不断发送,进入死循环。
我怎样从消息队列永久移除这条WM_PAINT消息呢?问题2:
发送什么消息,可以重绘系统菜单区(不是客户区)?谢谢!

解决方案 »

  1.   

    if (msg.message == WM_PAINT)
    {
    PAINTSTRUCT ps;
    ::BeginPaint(msg.hwnd, &ps);
    ::EndPaint(msg.hwnd, &ps);
    continue;
    }
      

  2.   

    while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
       if (msg.message == WM_PAINT)
    continue;
    }当然会进入死循环了,你 break 试试
      

  3.   

    问题1:
    如果不处理WM_PAINT讯息(这是很罕见的),它们必须被传送给DefWindowProc。DefWindowProc只是依次呼叫BeginPaint和EndPaint,以使显示区域有效。问题2:
    发送什么消息,可以重绘系统菜单区(不是客户区)?
    WM_NCPAINT