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
原创粉丝点击