OnPaint OnEraseBkgnd的调用关系

来源:互联网 发布:centos 目录权限 编辑:程序博客网 时间:2024/04/27 19:34

 

以下是定制Button的OnPaint函数,详细说明如下:

void CCustomBtn::OnPaint()

 {

    CPaintDC dc(this); // CPaintDC 实际上封装了BeginPaing,EndPaint。 BeginPaint() 和EndPaint() 可以删除消息队列中的WM_PAINT消息,并使无效区域有效,以防止因包含无效区域不停得发送WM_PAINT消息。如果无效区域被标记为可擦除的,BeginPaint发送一个WM_ERASEBKGND消息给窗口,WM_ERASEBKGND消息的响应函数既是OnEraseBkGnd(),响应结束后返回

 

    //OnPaint中绘制代码,此处的绘制将覆盖OnEraseBkgnd中的绘制

    CRect rect;

    GetClientRect(&rect);

    CBrush brush(RGB(255,0,0));

    dc.FillRect(rect, &brush);

    dc.SetBkMode(TRANSPARENT);

    CString strText;

    GetWindowText(strText);

    dc.DrawText(strText, strText.GetLength(), &rect, 0);

 

    CButton::OnPaint(); 

}

 

void CCustomBtn::OnEraseBkgnd(CDC* pDC)

{

//return CButton::OnEraseBkgnd( pDC);//如果调用窗口默认的背景刷,刷新背景,导致闪屏。解决方法:1.在OnPaint中绘制,此函数直接返回TRUE;2.在此处绘制背景,并返回TRUE,OnPaint中不需要绘制背景。

 

return TRUE;

}