ActiveX控件类的OnDraw()和OnPait()事件有何区别和联系啊?

ddmor 2003-09-01 10:06:39
我想在控件中绘制图表图形,首先自定义绘图代码函数Draw(),在OnPaint()中调用Draw()绘图,即使用InvalidateRect()控件内图形也不会重绘,产生花图,尝试在OnDraw()事件里调用Draw绘图又会产生错误,唉,我该怎么办呢?麻烦大家帮帮忙,解释一下OnDraw()和OnPait()事件有何区别啊,这样可能会给我一些启示吧
...全文
178 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddmor 2003-10-15
  • 打赏
  • 举报
回复
无人问津啊?
xuslei 2003-10-15
  • 打赏
  • 举报
回复
在控件的OnPaint中,增加代码:bHandled = FALSE;试一试,祝你好运
warmchang 2003-10-15
  • 打赏
  • 举报
回复
我做的控件是在OnPaint()中进行绘制的,可以满足需要的要求。

不过在打印和预览时有些问题,不知楼主遇到过没有,可以交流一下,^_^
Bear_Law 2003-10-15
  • 打赏
  • 举报
回复
2.ActiveX重绘时,只需调用FireViewChange( )即可。

祝好运!
Bear_Law 2003-10-15
  • 打赏
  • 举报
回复
ddmor,我刚刚用VC.NET 2003做过一个能在IE上显示图像的ActiveX,
说一些经验与你分享:
1.绘图时,在控件类的“public”下重载OnDraw( ATL_DRAWINFO& di )
函数。其中di.hdcDraw是当前绘图用的hDC;di.prcBounds是当前ActiveX
的区域,你可以通过以上两个东东“为所欲为”。
ddmor 2003-09-02
  • 打赏
  • 举报
回复
我在OnPait()和OnDraw()同时使用时,如果OnPait()中无绘图代码就会屏蔽OnDraw()绘图代码,即使OnDraw()有绘图代码也会无图形输出。
ldsjlzy 2003-09-02
  • 打赏
  • 举报
回复
OnPait()后会OnDraw().
ddmor 2003-09-01
  • 打赏
  • 举报
回复
用Invalidate(ture)也不会使背景清除使怎么会事啊,还有OnDraw()中使用GetClientRect()会出错,这是为什么呀
Springer 2003-09-01
  • 打赏
  • 举报
回复
OnDraw在设计期和运行期都会响应的函数,
OnPaint只是运行期的重画函数。
关于设计时期的支持VC做得很差,我也在犯愁,简直没法调试。

ddmor 2003-09-01
  • 打赏
  • 举报
回复
还有,在OnDraw()中使用GetClientRect()会出错,这是为什么呀
ddmor 2003-09-01
  • 打赏
  • 举报
回复
还有,通过什么办法GetClientRect()呢。
ddmor 2003-09-01
  • 打赏
  • 举报
回复
有什么办法实现背景擦除啊
Springer 2003-09-01
  • 打赏
  • 举报
回复
嗬嗬,客气了。
一样道理。
你的控件是接受不到消息的。
ddmor 2003-09-01
  • 打赏
  • 举报
回复
在此感谢tantongs(探问量) 师兄,还要问问,用Invalidate(ture)也不会使背景清除使怎么会事啊
Springer 2003-09-01
  • 打赏
  • 举报
回复
呵呵,DELPHI要好一点。不过也有不好的地方,DELPHI是把你的控件翻译成它的控件,默认地支持一些属性,如果你的属性不幸跟他同名,惨,毫不考虑就把你的给扔了。
Springer 2003-09-01
  • 打赏
  • 举报
回复
我也是刚知道点头绪,VC在编辑控件的时候,是不为控件生成句柄的,所以你调用GetClientRect是要出错的。

你用ACTIVEX CONTROL TEST CONTAINER调试你的控件要好一点。
不过也有缺点,我在尝试用DELPHI,不知道行不行。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧