zoukankan      html  css  js  c++  java
  • MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别

              OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别,如果没有注意这个问题就会出现无厘头式的绘图问题-- 效果就是出不来!在经过两个多小时的折磨后法相问题所在,总结出教训:

            OnPaint()函数中首先就调用CDialog::OnPaint()函数:

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. //给主窗体客户区添加位图背景  
    2. void CBackimageDlg::OnPaint()   
    3. {  
    4.                CDialog::OnPaint()  //最开始就调用  
    5.                 CPaintDC dc(this); // device context for painting  
    6.   
    7.                 CRect  rect;    
    8.         GetClientRect(&rect);    
    9.         CDC  dcMem;   //定义一个工具箱(设备上下文)  
    10.   
    11.         dcMem.CreateCompatibleDC(&dc);///建立关联DC   
    12.         CBitmap  bmpBackground;   //位图对象  
    13.         bmpBackground.LoadBitmap(IDB_BITMAP1);   //IDB_BITMAP是你自己的图对应的ID    
    14.         BITMAP  bitmap;    
    15.         bmpBackground.GetBitmap(&bitmap);  //建立绑定关系  
    16.         CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground);   //保存原有CDC对象,并选入新CDC对象入DC  
    17.           
    18.         dc.SetStretchBltMode(COLORONCOLOR);//防止bmp图片失真  
    19.         dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,  bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);  
    20.   
    21.         dcMem.SelectObject(pbmpOld);  
    22.         bmpBackground.DeleteObject();  
    23.                 dcMem.DeleteDC();  
    24.   
    25. }  

            运行效果:背景位图死活不出来,这种错误很难察觉哪儿出了问题

           OnPaint()函数中最后调用CDialog::OnPaint()函数:

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. void CBackimageDlg::OnPaint()   
    2. {  
    3.         CPaintDC dc(this); // device context for painting  
    4.   
    5.                 CRect  rect;    
    6.         GetClientRect(&rect);    
    7.         CDC  dcMem;   //定义一个工具箱(设备上下文)  
    8.   
    9.         dcMem.CreateCompatibleDC(&dc);///建立关联DC   
    10.         CBitmap  bmpBackground;   //位图对象  
    11.         bmpBackground.LoadBitmap(IDB_BITMAP1);   //IDB_BITMAP是你自己的图对应的ID    
    12.         BITMAP  bitmap;    
    13.         bmpBackground.GetBitmap(&bitmap);  //建立绑定关系  
    14.         CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground);   //保存原有CDC对象,并选入新CDC对象入DC  
    15.           
    16.         dc.SetStretchBltMode(COLORONCOLOR);//防止bmp图片失真  
    17.         dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,  bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);  
    18.   
    19.         dcMem.SelectObject(pbmpOld);  
    20.         bmpBackground.DeleteObject();  
    21.                 dcMem.DeleteDC();  
    22.        
    23.         CDialog::OnPaint();  //最后才调用  
    24. }  


          运行效果:背景位图效果出来了

       

    总结:

            一句代码,两个位置,两种效果!如果稍不注意,这种错误是难以察觉的,我以前为Client区域绘制时一直很顺利,但是今天粗心大意犯下这个错误,我花了两个半小时检查我的代码(这个工程里有2000多行代码!开始猜想是代码间的干扰造成的),最后才注意到OnPaint()函数中的CDialog::OnPaint()的位置放错了!哎。

            留下一点笔记,提醒自己!

    http://blog.csdn.net/qq2399431200/article/details/17739087

  • 相关阅读:
    C#通过模板导出Word(文字,表格,图片) 转载
    转载:mysql新手入门安装配置:mysql 8.0.13 zip安装,初始配置,修改密码(经测试管用)
    转载:MySQL 8.0.19安装教程(windows 64位)
    VS2010上winform打包发布、打包安装程序
    asp.net core mvc权限控制:分配权限
    asp.net core mvc权限控制:权限控制介绍
    实测可用-免费屏幕录制软件下载地址
    Win10激活工具-Win7激活工具-Office激活工具-KMS激活工具汉化版x64下载-实测可用
    C#-WPF实现抽屉式风格主题框架源码-使用MaterialDesignThemes实现WPF炫酷漂亮的效果-提供Demo下载
    C#实现图片暗通道去雾算法-Demo-提供代码实例下载地址
  • 原文地址:https://www.cnblogs.com/findumars/p/6569267.html
Copyright © 2011-2022 走看看