加载对话框背景图片,代码如下,可是为什么对话框最大化之后,会有重叠,原来的图片还在,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);就好了,但是新的问题是会出现闪屏。