c++ - MFC 自定义 OnPaint 未被可靠地调用

标签 c++ mfc onpaint ownerdrawn

我继承了一个 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/

相关文章:

delphi - 设置 Paintbox 的字体大小会导致调用 OnPaint

combobox - MFC:如何为所有者绘制呈现 Aero 风格的组合框?

c++ - 对静态类成员的 undefined reference

VS2013 Unicode 中的 C++ 多行 CString 文字

c++ - new int[100] 和 new int[100]() 的区别;

visual-studio-2008 - 如何使用 MFC 在 MSVC 2008 中使编辑框在运行时消失(不是灰色)?

c++ - wglDeleteContext 访问冲突

c++ - 停止从 main() 调试 eclipse CDT?

c++ - 将 CString 用于树节点时发生内存泄漏

c# - 用于在 System.Label 上准确放置文本的图形 DrawString