首页 > 代码库 > MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别,如果没有注意这个问题就会出现无厘头式的绘图问题-- 效果就是出不来!在经过两个多小时的折磨后法相问题所在,总结出教训:
OnPaint()函数中首先就调用CDialog::OnPaint()函数:
[cpp] view plain copy
- //给主窗体客户区添加位图背景
- 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对象入DC
- dc.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()函数:
[cpp] view plain copy
- 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对象入DC
- dc.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()的位置放错了!哎。
留下一点笔记,提醒自己!
http://blog.csdn.net/qq2399431200/article/details/17739087
MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。