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;
}
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;
}
相关文章推荐
- onInterceptTouchEvent和onTouchEvent调用关系详解
- OnEraseBkgnd、OnPaint与画面重绘(很好的说明其调用实现关系)
- MFC OnPaint被不断调用的问题
- ONERASEBKGND OnPaint OnDraw
- MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent调用关系
- 探讨Android ViewGroup(Layout)和View中onInterceptTouchEvent和onTouchEvent调用关系详解
- 使用WARN_ON来追溯函数的调用关系
- Activity的生命周期函数、onActivityResult、intent和启动模式的调用关系
- onInterceptTouchEvent和onTouchEvent调用关系详解
- OnTouch、OnClick、OnLongClick、OnFocusChange之间的调用关系
- OnTouch、OnClick、OnLongClick、OnFocusChange之间的调用关系
- Android事件dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent、OnTouchListener调用关系
- 求高手解答:C# winform中protected 的OnPaint被谁调用?
- MFC学习笔记之OnPaint和OnDraw之间的关系
- Android onInterceptTouchEvent与onTouchEvent调用关系
- OnTouch、OnClick、OnLongClick、OnFocusChange之间的调用关系
- Android开发学习笔记(14):OnTouch、OnClick、OnLongClick、OnFocusChange调用关系
- onInterceptTouchEvent和onTouchEvent调用关系详解 ...