非模态对话框D1,标题栏和最小最大关闭按钮是都自己画的,也就说没有非客户区,自己画的标题栏位蓝色,背景色为默认的银灰色。
上面有个按钮,是打开文件的(打开文件对话框D2,模态对话框),点这个按钮后,出来D2,左右移动这个对话框,D1的标题栏会被覆盖。
覆盖后,把D2再移开,就是不覆盖D1的标题栏了,但是D1的标题栏不会变回蓝色,而是默认的银灰色。
求解。
上面有个按钮,是打开文件的(打开文件对话框D2,模态对话框),点这个按钮后,出来D2,左右移动这个对话框,D1的标题栏会被覆盖。
覆盖后,把D2再移开,就是不覆盖D1的标题栏了,但是D1的标题栏不会变回蓝色,而是默认的银灰色。
求解。
{
// TODO: 在此添加专用代码和/或调用基类 LRESULT lst= CDialog::DefWindowProc(message, wParam, lParam);
if(!IsWindow(m_hWnd))
{
return lst;
}
if(message==WM_MOVE || message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{
CDC* pWinDC = GetWindowDC();
if (pWinDC)
DrawTitleBar(pWinDC); //这里是你画标题的函数
ReleaseDC(pWinDC);
} return lst;
}
UpdateWindow();
你自绘的过程是在OnPaint里完成的么?
OnEraseBkgnd怎么处理的?
那就奇怪了
不应该出现这种问题啊
OnPaint代码看看
{
CPaintDC dc(this);
Graphics graphics(dc.GetSafeHdc());
CRect rcClient;
GetClientRect(&rcClient);
//内存图像和内存Graphics
Bitmap bmp(rcClient.Width(), rcClient.Height());
Graphics* buffergraphics = Graphics::FromImage(&bmp);
//画标题栏,即自己定制的标题栏
DrawHeadClient(buffergraphics, rcClient);
//把绘好的图从内存画到屏幕
graphics.DrawImage(&bmp, 0, 0, rcClient.Width(), rcClient.Height());
delete buffergraphics;
graphics.ReleaseHDC(dc.GetSafeHdc());
ReleaseDC(&dc);
}
调用D1::PreTranslateMessage();
UpdateWindow(); 重绘刷新void CChatDlg::OnPaint()
{
CPaintDC dc(this);
Graphics graphics(dc.GetSafeHdc());
CRect rcClient;
GetClientRect(&rcClient);
//内存图像和内存Graphics
Bitmap bmp(rcClient.Width(), rcClient.Height());
Graphics* buffergraphics = Graphics::FromImage(&bmp);
//画标题栏,即自己定制的标题栏
DrawHeadClient(buffergraphics, rcClient);
//把绘好的图从内存画到屏幕
graphics.DrawImage(&bmp, 0, 0, rcClient.Width(), rcClient.Height());
delete buffergraphics;
graphics.ReleaseHDC(dc.GetSafeHdc());
ReleaseDC(&dc);
}