我继承了一个 MFC 应用程序,它有一个窗口,其中有几个响应 OnPaint
并进行各种绘图的自绘小部件。
我注意到为了强制控件重绘以响应各种用户操作,有以下代码:
CRect rect;
m_myControl.GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect, FALSE);
我认为这可以这样简化:
m_myControl.Invalidate(FALSE);
但是,在实践中,当我这样做时,控件有时会绘制,但有时不会。具体来说,当我与窗口中的控件交互时,有时 myControl
最终只是绘制为纯灰色。我将代码改回更复杂的 InvalidateRect
样式,它再次运行良好。
为什么这里会有差异?
最佳答案
当您使一个窗口无效时,您不会使它下面的窗口无效。如果父窗口负责绘制控件,则它不会被触发,因为您没有告诉它它需要更新。在这种情况下,原始代码会做正确的事情。
关于c++ - MFC 自定义 OnPaint 未被可靠地调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266812/