MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
来源:互联网 发布:淘宝上的巴花大板真假 编辑:程序博客网 时间:2024/06/12 20:13
OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别,如果没有注意这个问题就会出现无厘头式的绘图问题-- 效果就是出不来!在经过两个多小时的折磨后法相问题所在,总结出教训:
OnPaint()函数中首先就调用CDialog::OnPaint()函数:
//给主窗体客户区添加位图背景void CBackimageDlg::OnPaint() { CDialog::OnPaint() //最开始就调用 CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(&rect); CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);///建立关联DC CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP是你自己的图对应的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCdc.SetStretchBltMode(COLORONCOLOR);//防止bmp图片失真dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);dcMem.SelectObject(pbmpOld);bmpBackground.DeleteObject(); dcMem.DeleteDC();}运行效果:背景位图死活不出来,这种错误很难察觉哪儿出了问题
OnPaint()函数中最后调用CDialog::OnPaint()函数:
void CBackimageDlg::OnPaint() {CPaintDC dc(this); // device context for painting CRect rect; GetClientRect(&rect); CDC dcMem; //定义一个工具箱(设备上下文)dcMem.CreateCompatibleDC(&dc);///建立关联DC CBitmap bmpBackground; //位图对象bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP是你自己的图对应的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); //建立绑定关系CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); //保存原有CDC对象,并选入新CDC对象入DCdc.SetStretchBltMode(COLORONCOLOR);//防止bmp图片失真dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);dcMem.SelectObject(pbmpOld);bmpBackground.DeleteObject(); dcMem.DeleteDC(); CDialog::OnPaint(); //最后才调用}
运行效果:背景位图效果出来了
总结:
一句代码,两个位置,两种效果!如果稍不注意,这种错误是难以察觉的,我以前为Client区域绘制时一直很顺利,但是今天粗心大意犯下这个错误,我花了两个半小时检查我的代码(这个工程里有2000多行代码!开始猜想是代码间的干扰造成的),最后才注意到OnPaint()函数中的CDialog::OnPaint()的位置放错了!哎。
留下一点笔记,提醒自己!
3 0
- MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
- MFC中OnPaint和OnDraw的区别
- 关于对话框OnPaint 不调用基类CDialog::OnPaint方法CPU消耗很大达到70%以上问题
- MFC子类调用父类的OnPaint()
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- MFC中OnDraw与OnPaint的区别
- Java枚举类型的基本使用(一)
- 告别2013,迎接2014
- hadoop自定义分组 步骤1.4
- 黑马程序员_Web项目中用户权限的简单分析
- 优秀程序员的十个习惯
- MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
- 对一些面试题的回答
- android获取状态栏的高度。
- 高效能人士的七个习惯
- LTE RLC理解(二) AM
- 写自己的代码之关于call与apply的使用
- MyEclipse8.5安装aptana插件说明(适用于多种插件)
- 一个桔子功效等同五味药
- 机房结账(一)