非模态对话框调用movewindow()后,不重绘背景
重载OnEraseBkgnd()函数,重绘背景。
BOOL CProgressDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
this->GetClientRect(&rect);
if (!memDC_.IsOK())
{ // 背景还没有绘制到内存DC中
// 获取背景图片的完整路径名
CDirectory dirOper;
CString szPicPath = dirOper.GetCurrentDirectory() + PATH_SEPARATOR
+ DEFAULT_PICTURE_FOLDER + PATH_SEPARATOR;
if (m_backjpg.IsEmpty())
szPicPath += PICTURE_DIALOG_BACKGROUND;
else
szPicPath += m_backjpg;
// 将背景绘制到内存DC中
SIZE size = { rect.Width(), rect.Height() };
memDC_.Create(pDC->GetSafeHdc(), &size);
Graphics graphics(memDC_.GetDC());
Bitmap bmpBG(szPicPath);
graphics.DrawImage(&bmpBG, 0, 0, rect.Width(), rect.Height());
}
::BitBlt(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), memDC_.GetDC(), 0, 0, SRCCOPY);
return TRUE;
//return CDialogEx::OnEraseBkgnd(pDC);
}
使用非模态对话框
HWND CProgressHandle::ShowWindow(CWnd *pWnd)
{
try
{
m_pProgressDlg = new CProgressDlg(pWnd);
m_pProgressDlg->Create(IDD_DLG_PROGRESS,pWnd);
if(NULL != m_pProgressDlg)
{
CRect rcWorkArea,rcPopArea;
pWnd->GetClientRect(&rcWorkArea);
pWnd->ClientToScreen(&rcWorkArea);
rcPopArea.left = (rcWorkArea.right-rcWorkArea.left)/4;
rcPopArea.top = (rcWorkArea.bottom-rcWorkArea.top)/4;
rcPopArea.right = rcPopArea.left + (rcWorkArea.right-rcWorkArea.left)/2;
rcPopArea.bottom = rcPopArea.top + (rcWorkArea.bottom-rcWorkArea.top)/2;
::MoveWindow(m_pProgressDlg->GetSafeHwnd(),rcPopArea.left, rcPopArea.top, rcPopArea.Width(), rcPopArea.Height(),TRUE);
::SetWindowPos(m_pProgressDlg->GetSafeHwnd(), HWND_TOPMOST, rcPopArea.left, rcPopArea.top, rcPopArea.Width(), rcPopArea.Height(), SWP_SHOWWINDOW);
return m_pProgressDlg->GetSafeHwnd();
}
return 0;
}
catch(...)
{
return 0;
}
}
窗口显示后,只和重绘了对话框初始大小的面积,其它部分没有重绘。
请大侠给指导一下。。