有关美化界面消息之间的关系

参考文章: 白乔原创:VC之美化界面篇
1.WM_PAINT与WM_ERASEBKGND消息的关系
由Win32的知识可知,在WM_PAINT的消息处理函数中,绘制之前首先需要调用BeginPaint。BeginPaint函数会发送WM_ERASEBKGND消息(SendMessage),即直接调用消息处理函数来处理WM_ERASEBKGND消息。DefWindowProc默认处理WM_ERASEBKGND是用窗口注册的画刷刷客户区,即背景。
Note:
当然通过调用InvalidateRect(代码产生WM_PAINT消息)
BOOL InvalidateRect(  
  HWND hWnd,           // handle to window
  CONST RECT* lpRect,  // rectangle coordinates
  BOOL bErase          // erase state);
来产生WM_PAINT消息,可以通过指定bErase为FALSE,则不会在BeginPaint中发送WM_ERASEBKGND消息。
2.我总结的大体各美化界面消息间的流程如下:
WM_PAINT
{
    WM_ERASEBKGND  //刷背景
    {
        WM_CTLCOLOR  //获取刷背景的画刷,不响应该消息则默认为窗口注册的画刷
        {
            ......
        }
        ...刷背景...
    }
    
    WM_CTLCOLOR  //设置有关Text的相关特性,如字体、前景色、背景色等...
    {
        ......
    }
    
    //具体开始绘制
    {
        ......
        
        //绘制某具体项1
        {
            NM_CUSTOMDRAW  //由程序员客制部分属性
            {
            }
            具体绘制(未开放)
        }
  
        ......

        //绘制某具体项2
        {
            NM_CUSTOMDRAW  //由程序员客制部分属性
            {
            }
            具体绘制(未开放)
        }
        
        ......
    }
}

你可能感兴趣的:(有关美化界面消息之间的关系)