各位老师,你们好!
   我在VC2005中建了一个基于对话框的程序,在对话框上增加了最大化和最小化按钮,并在OnEraseBkgnd中改变对话框的背景图片,具体函数如下:
BOOL Ctest4Dlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::CoInitialize(NULL); // COM 初始化 
HRESULT hr; 
CFile file; 
file.Open(_T("c:\\123.jpg"), CFile::modeRead|CFile::shareDenyNone); // 读入文件内容 
DWORD dwSize = DWORD(file.GetLength()); 
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); 
LPVOID lpBuf = ::GlobalLock( hMem ); 
file.Read( lpBuf, dwSize ); 
file.Close(); 
::GlobalUnlock( hMem ); IStream * pStream = NULL; 
IPicture * pPicture = NULL; // 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存 
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream ); 
ASSERT ( SUCCEEDED(hr) ); hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture ); 
ASSERT(hr==S_OK); long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米 
pPicture->get_Width( &nWidth ); // 宽 
pPicture->get_Height( &nHeight ); // 高 CSize sz( nWidth, nHeight); 
pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位 ////////按窗口尺寸显示//////// 
 CRect rect; 
 GetClientRect(&rect); pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(), 0,nHeight,nWidth,-nHeight,NULL); if ( pPicture ) pPicture->Release();// 释放 IPicture 指针 
if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem ::CoUninitialize(); 
return 1;
//return CDialog::OnEraseBkgnd(pDC);}
背景图片显示正确,但是当对话框最大化时,整个对话框的背景重绘了,但是原先的(正常大小时)的背景仍然在左上角,也就是这一部分没有重绘,只绘了扩大的部分,我是想让整个对话框的背景全部重绘,请高手指教!!!!
先谢谢了!