加载对话框背景图片,代码如下,可是为什么对话框最大化之后,会有重叠?

 

加载对话框背景图片,代码如下,可是为什么对话框最大化之后,会有重叠,原来的图片还在,OnPaint函数并没有完全重绘?

void CCAnalysisReport::ChangeSize(UINT nID, int x, int y, BOOL bTag)

{

       CWnd *pWnd;

       pWnd=GetDlgItem(nID);

       // 判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空[6/26/2013 dell]

       if(pWnd!=NULL)   

       {

              // 获取控件变化前的大小[6/26/2013dell]

              CRect rec;

              pWnd->GetWindowRect(&rec); 

              // 将控件大小装换位在对话框中的区域坐标[6/26/2013 dell]

              ScreenToClient(&rec); 

 

              if (bTag)

              {

                     m_nMoveDis = rec.right*x/m_rect.Width()-rec.right;

                     rec.left=rec.right*x/m_rect.Width()-rec.right+rec.left//按照比例调整空间的新位置

                     rec.top=rec.top;

                     rec.bottom=rec.bottom;

                     rec.right=rec.right*x/m_rect.Width();

              }

              else

              {

                     // 按照比例调整空间的新位置[6/26/2013 dell]

                     rec.left=rec.left*x/m_rect.Width();

                     rec.top=rec.top;

                     rec.bottom=rec.bottom*y/m_rect.Height();

                     rec.right=rec.right + m_nMoveDis;

              }

 

              pWnd->MoveWindow(rec);   //伸缩控件

       }

}

void CCAnalysisReport::OnPaint()

{

       CPaintDC dc(this); // device contextfor painting

       // TODO: Add your message handler code here

       if (IsIconic())   // 用于绘制的设备上下文

       {

              SendMessage(WM_ICONERASEBKGND,reinterpret_cast<WPARAM>(dc.GetSafeHdc()),0);

              // 使图标在工作区矩形中居中

              int cxIcon = GetSystemMetrics(SM_CXICON);

              int cyIcon = GetSystemMetrics(SM_CYICON);

              CRect rect;

              GetClientRect(&rect);

              int x = (rect.Width() - cxIcon + 1) / 2;

              int y = (rect.Height() -cyIcon + 1) / 2;

 

              // 绘制图标

              dc.DrawIcon(x, y, m_hIcon);

       }

       else// 给窗体添加背景

       {     

              CRect wnd_rc;

              GetClientRect(&wnd_rc);

              CDC dcMem;  

              dcMem.CreateCompatibleDC(&dc);

              CBitmap bmpBackground;

              bmpBackground.LoadBitmap(IDB_BMP_ANSWERCARDBK);

 

              BITMAP bitmap;

              bmpBackground.GetBitmap(&bitmap);

              CBitmap* pbmpPri= dcMem.SelectObject(&bmpBackground);

              dc.SetStretchBltMode(COLORONCOLOR);

              dc.StretchBlt(0,0,wnd_rc.Width(),wnd_rc.Height(),&dcMem,0,0,bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

              bmpBackground.DeleteObject();

              DeleteDC(dcMem);   

       }

       // Do not call CDialog::OnPaint() for painting messages

}

http://www.360doc.com/content/10/1023/23/2379862_63453985.shtml

搞了一上午也没找到原因,难道是原来的图片没有清除?各种方法都试了仍然不行,好吧,我承认,我二了,不过是窗体未刷新而已。好吧,我在OnSize()函数中加入Invalidate(FALSE);就好了,但是新的问题是会出现闪屏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值