您的位置:首页 > 大数据 > 人工智能

OnPaint OnEraseBkgnd的调用关系

2010-11-12 13:33 316 查看
以下是定制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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: