activex 如何调用OnDraw函数
2个回答
展开全部
在最初显示或重新绘制 ActiveX 控件时,控件遵循与使用 MFC 开发的其他应用程序相似的过程,但有一个重要的区别:ActiveX 控件可以是活动状态或非活动状态。
活动控件在 ActiveX 控件容器中由子窗口表示。与其他窗口一样,活动控件负责在接收到 WM_PAINT 消息时绘制自身。控件的基类 COleControl 在其 OnPaint 函数中处理此消息。此默认实现调用控件的 OnDraw 函数。
非活动控件的绘制过程与此不同。当控件处于非活动状态时,其窗口不可见或不存在,因此无法接收绘制消息。相反,控件容器直接调用控件的 OnDraw 函数。此过程与活动控件的绘制过程不同,因为从不调用 OnPaint 成员函数。
如以上段落所讨论的,如何更新 ActiveX 控件取决于控件的状态。但是,由于框架在两种情况中都调用 OnDraw 成员函数,因此在此成员函数中添加大部分绘制代码。
OnDraw 成员函数处理控件的绘制。当控件处于非活动状态时,控件容器调用 OnDraw,并传递控件容器的设备上下文和该控件所占据的矩形区域的坐标。
框架传递给 OnDraw 成员函数的矩形包含控件占据的区域。如果控件处于活动状态,则左上角是 (0, 0),并且传递的设备上下文是包含该控件的子窗口的设备上下文。如果控件处于非活动状态,则左上角的坐标不一定是 (0, 0),并且传递的设备上下文是包含该控件的控件容器的设备上下文。
其余请见参考资料部分。
下面是咱自己的心得:就像大多数GUI一样,当图形需要初始化时,OnDraw函数响应ONPAINT消息,工程起初生成的三大基类之中的COleControl调用OnPaint方法,OnPaint方法调用OnDraw函数执行绘制;如果控件已被初始化且重新回到活动状态时(重绘),就直接调OnDraw方法。
活动控件在 ActiveX 控件容器中由子窗口表示。与其他窗口一样,活动控件负责在接收到 WM_PAINT 消息时绘制自身。控件的基类 COleControl 在其 OnPaint 函数中处理此消息。此默认实现调用控件的 OnDraw 函数。
非活动控件的绘制过程与此不同。当控件处于非活动状态时,其窗口不可见或不存在,因此无法接收绘制消息。相反,控件容器直接调用控件的 OnDraw 函数。此过程与活动控件的绘制过程不同,因为从不调用 OnPaint 成员函数。
如以上段落所讨论的,如何更新 ActiveX 控件取决于控件的状态。但是,由于框架在两种情况中都调用 OnDraw 成员函数,因此在此成员函数中添加大部分绘制代码。
OnDraw 成员函数处理控件的绘制。当控件处于非活动状态时,控件容器调用 OnDraw,并传递控件容器的设备上下文和该控件所占据的矩形区域的坐标。
框架传递给 OnDraw 成员函数的矩形包含控件占据的区域。如果控件处于活动状态,则左上角是 (0, 0),并且传递的设备上下文是包含该控件的子窗口的设备上下文。如果控件处于非活动状态,则左上角的坐标不一定是 (0, 0),并且传递的设备上下文是包含该控件的控件容器的设备上下文。
其余请见参考资料部分。
下面是咱自己的心得:就像大多数GUI一样,当图形需要初始化时,OnDraw函数响应ONPAINT消息,工程起初生成的三大基类之中的COleControl调用OnPaint方法,OnPaint方法调用OnDraw函数执行绘制;如果控件已被初始化且重新回到活动状态时(重绘),就直接调OnDraw方法。
参考资料: http://msdn.microsoft.com/zh-cn/library/cc451433(v=vs.71).aspx
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询