关于MFC背景BMP图上控件更新问题
我是在Static对话框内显示了一张载入资源的BMP背景图,图分成左右两边 ,上面右边放着放着一些TAB标签控件和按钮,在按下按钮后会在背景图的左边显示一个非态对话框。
发现问题是,刚开始时,背景图右边的控件完全在图的上面,正常。
但一按下按钮在图的左边产生非模态对话框时,背景图右边的控件就都被背景图给覆盖了,鼠标移动到被覆盖的控件位置上电机,被覆盖的控件才会显示出来!!
我的理解是在产生这个非模态对话框时,焦点移动到了这个新产生的对话框,窗口重绘。将没有获得焦点的控件全覆盖了?????是否是这样呢??
该函数在Onpaint()中
else
{
CDialog::OnPaint();//如果注释掉这句,那么一开始,全部控件都被覆盖了!
//静态框窗口
CWnd *pWnd = GetDlgItem(IDC_STATIC_Bitmap);
if(pWnd && pWnd->GetSafeHwnd())
{
//客户区大小
CRect rcClient;
pWnd->GetClientRect(rcClient);
//DC句柄
CDC *pDC = pWnd->GetDC();
//兼容内存DC
CDC memDC;
memDC.CreateCompatibleDC(pDC);
//加载位图
CBitmap memBitmap;
memBitmap.LoadBitmap(IDB_BITMAP2);
//获取位图信息
BITMAP bmpInfo;
memBitmap.GetBitmap(&bmpInfo);
//位图选人内存DC
CBitmap *pOldBitmap = memDC.SelectObject(&memBitmap);
//半色调 避免缩放颜色失真
int iStretchBltMode = pDC->SetStretchBltMode(HALFTONE);
//贴图到目标DC
pDC->StretchBlt(rcClient.left,rcClient.top, rcClient.Width(), rcClient.Height(),
&memDC,
0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,
SRCCOPY);
//恢复模式
pDC->SetStretchBltMode(iStretchBltMode);
//结束清理
memDC.SelectObject(pOldBitmap);
memDC.DeleteDC();
memBitmap.DeleteObject();
pWnd->ReleaseDC(pDC);
}
}
}