我按照网上说的实现了static 控件显示图片,可是我确实是把绘制图片的部分放在OnPaint()里面,可是有东西遮住图片后,被遮住的部分照样没有了,不知道是什么问题,请各位帮帮忙,谢谢
   代码如下:
   CImage g_TCimage;  //原图
   CImage g_CImgTemp; //处理后的图像OnPaint()部分:
void CimgdispDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 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
{
/****************************************图片显示部分*****************************************/
if(!g_CImgTemp.IsNull())
{
RECT stRect;
m_imgdisp.GetClientRect(&stRect);                            //如果图片大于控件大小,就用StretchBlt实现绘图,m_imgdisp是static控件变量。
if(g_CImgTemp.GetWidth() > (stRect.right - stRect.left)||g_CImgTemp.GetHeight() > (stRect.bottom - stRect.top))
{
CDC* pDC = m_imgdisp.GetDC(); CBitmap bitmp;
bitmp.Attach((HBITMAP)g_CImgTemp); CDC dcmemory;
dcmemory.CreateCompatibleDC(pDC);
dcmemory.SelectObject(&bitmp);
          long wide,high;
BITMAP bmp;
bitmp.GetBitmap(&bmp);
wide = bmp.bmWidth;
high = bmp.bmHeight;
SetStretchBltMode(pDC->m_hDC,STRETCH_HALFTONE); 
pDC->StretchBlt(stRect.left,stRect.top,stRect.right - stRect.left,stRect.bottom - stRect.top,&dcmemory,0,0,wide,high,SRCCOPY);
}
else m_imgdisp.SetBitmap((HBITMAP)g_CImgTemp);
    }
/****************************************图片显示部分*****************************************/
CDialog::OnPaint();
}
}
打开图片按钮的代码,主要是给g_CImgTemp赋值:
void CimgdispDlg::OnBnClickedOk()
{
char buffer[512];
DWORD dRet;
dRet = GetCurrentDirectory(512, buffer);        //保存当前路径 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"JPEG Files (*.jpg;*.jpeg)|*.jpg; *.jpeg|Bitmap Files (*.bmp)|*.bmp||",NULL);
dlgFile.DoModal(); CString csfilename = dlgFile.GetFileName();
CString csfiledir = dlgFile.GetPathName(); if(!csfilename.IsEmpty())
{
g_TCimage.Destroy();
g_CImgTemp.Destroy();
if(!temp.IsNull())
temp.Destroy(); g_TCimage.Load(csfiledir);
strcpy(m_FilePath,csfiledir);//filename
CopyCImageObj(g_CImgTemp, g_TCimage);
} if (!SetCurrentDirectory((LPCSTR)buffer))//恢复工作目录
{
TRACE("restet current path ERROR\n");
}
}