MFC自定义OnPaint未被可靠调用

时间:2012-02-13 19:36:29

标签: c++ mfc onpaint ownerdrawn

我继承了一个MFC应用程序,它有一个窗口,其中有几个所有者绘制的小部件,它们响应OnPaint并进行各种绘制。

我注意到为了强制控件重绘以响应各种用户操作,有以下代码:

CRect rect;
m_myControl.GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect, FALSE);

我认为这可以简化为:

m_myControl.Invalidate(FALSE);

但是,在实践中,当我这样做的时候,控件有时会涂漆而不是其他涂料。具体来说,当我在窗口中与控件进行交互时,有时myControl最终只会绘制为灰色。我将代码更改回更复杂的InvalidateRect样式,并且它再次运行良好。

为什么会有区别?

1 个答案:

答案 0 :(得分:1)

当您使窗口无效时,您不会使其下方的窗口无效。如果父窗口负责绘制控件,它将不会被触发,因为您没有告诉它需要更新。在这种情况下,原始代码做正确的事。