处理WM_PAINT消息

一般地,处理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消息,且一直发送下去。

阅读更多
文章标签: windows
个人分类: windows编程
上一篇关于WM_PAINT
下一篇滚动条
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭