【发布时间】:2013-04-07 04:25:27
【问题描述】:
我有一个基于 MFC 的 ActiveX 控件,其中一些重要的东西不起作用。永远不会调用大小事件,并且仅当我单击控件的边框(在 ActiveX 测试容器中)时才会重绘控件内容。
这是我在头文件中的大小事件代码:
public:
afx_msg void OnPaint();
...在源文件中:
BEGIN_MESSAGE_MAP(CBeamConstruXCtrl, COleControl)
ON_WM_SIZE()
ON_WM_PAINT()
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
END_MESSAGE_MAP()
void MyCtrl::OnPaint()
{
//this is never called also when I change the size of the control in test container
}
任何想法这里缺少什么?
编辑:只是澄清一下:OnSize() 在 OCX 的初始化阶段被调用一次,但在我更改控件大小时从未调用过。
【问题讨论】:
-
您需要覆盖
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);而不是处理 WM_PAINT。没有更多信息无法解释 WM_SIZE - 它是无窗口控件吗? -
好的,它是 OnDraw(),它解决了这两个问题 :-) 谢谢!