你好,我已经寻找了几天如何避免CDialog中的控件自身闪烁。
我正在使用CMemDC并擦除背景以绘制一些基本形状,使用GDI+。
void CCustomDialog::OnPaint()
{
CPaintDC pDC(this);
CMemDC dc(&pDC);
Gdiplus::Graphics graphics(dc.GetSafeHdc());
CRect clip;
dc.GetClipBox(&clip);
dc.FillSolidRect(clip, GetSysColor(COLOR_WINDOW));
DefWindowProc(WM_PAINT, (WPARAM)dc->m_hDC, (LPARAM)0);
Gdiplus::Pen pen(Gdiplus::Color(150, 125, 255, 100), 5.0);
graphics.DrawEllipse(&pen, 200, 50+m_interator, 100, 100);
}
这个类继承自CDialog,并将成为其他对话框控制"主题"的基类。
但是,当我在鼠标移动事件中使窗口失效并更新时。
void CCustomDialog::OnMouseMove(UINT nFlags, CPoint point)
{
m_interator++;
Invalidate();
UpdateWindow();
CDialog::OnMouseMove(nFlags, point);
}
椭圆形按钮没有闪烁,但其他所有按钮、标签和编辑控件都会闪烁。
我还没找到任何解决方法,而且我自己对MFC也不了解,无法避免它。
有什么建议吗?
我想也许我可以将控件的DC设置为相同的CMemDC,但我还不确定如何做到这一点。如果我想出来了,会在这里发布。
WS_CLIPCHILDREN
样式。 - j6t