以下是定制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;
}