0

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

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

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

我认为这可以简化如下:

m_myControl.Invalidate(FALSE);

但是,在实践中,当我这样做时,控件有时会绘制,但有时不会绘制。具体来说,当我与窗口中的控件交互时,有时myControl最终只会画成纯灰色。我将代码改回更复杂InvalidateRect的样式,它再次运行良好。

为什么这里会有区别?

4

1 回答 1

1

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

于 2012-02-13T20:30:21.260 回答