【发布时间】:2011-11-03 11:07:55
【问题描述】:
我创建了一个自定义控件,其类以CStatic 作为基类。目前我使用WM_PAINT 事件处理绘图。但是有一个奇怪的行为。当我使用CWnd::EnableWindow 函数禁用它后重新启用窗口时,它拒绝绘制我在OnPaint 函数中编写的内容。它改为绘制静态控件。
我同意有这种覆盖DrawItem 并使用SS_OWNERDRAW 样式的标准方法。但是WM_PAINT 有什么问题?
void XXControl::OnPaint()
{
CPaintDC PaintDC( this );
// ** draw the control to PaintDC**
}
【问题讨论】:
-
CStatic 是父控件还是基类?
-
您是否尝试在 EnableWindow 之后调用 Invalidate?如果 OnPaint 实际接收到消息,则在 OnPaint 中放置一个断点。
-
显然不是!在这种情况下,不会调用 OnPaint。另外,在那个特定的调用中,Invalidate 的需要是什么,完美绘制的控件正在变成普通的静态控件?所以在那里发生了平局,但在这种情况下不是通过我的 OnPaint。
标签: c++ mfc ownerdrawn wm-paint