现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

处理WM_PAINT消息

2012-08-10 22:52 工业·编程 ⁄ 共 599字 ⁄ 字号 暂无评论

    一般地,处理WM_PAINT消息的形式如下:

case WM_PAINT:
         hdc=BeginPaint(hwnd,&ps); //取得设备内容句柄
        使用GDI函数;
         EndPaint(hwnd,&ps);   //释放句柄
        Return 0;

    在处理WM_PAINT消息时,必须成对地呼叫BeginPaint和EndPaint。如果窗口消息处理程序不处理WM_PAINT消息,则它必须将WM_PAINT消息传递给Windows中DefWindowProc(内定窗口消息处理程序)。DefWindowProc以下列代码处理WM_PAINT消息:

case WM_PAINT:
    BeginPaint (hwnd, &ps) ;
    EndPaint (hwnd, &ps) ;
   return 0 ;

    这两个BeginPaint和EndPaint呼叫之间中没有任何叙述,仅仅使先前无效区域变为有效。但以下方法是错误的:

case WM_PAINT:
        
    return 0 ;   // WRONG !!!
        

    Windows将一个WM_PAINT消息放到消息队列中,是因为显示区域的一部分无效。如果不呼叫BeginPaint和EndPaint(或者ValidateRect),则Windows不会使该区域变为有效。相反,Windows将发送另一个WM_PAINT消息,且一直发送下去。

【上篇】
【下篇】

给我留言

留言无头像?