为什么我写的Activex控件,切换窗口后画的图就没有了
1个回答
展开全部
还有好几个概念你还没弄明白,所以解释有点困难。
1、ATL制作的控件可以是有窗口的,也可以是无窗口的,你的是哪一类?
2、不管有没有窗口,你只需重载OnDraw方法,并且用参数提供的HDC来绘制,ATL库内部屏蔽了有窗口和无窗口控件绘制之间的区别,有窗口控件的绘制来源是WM_PAINT消息,无窗口控件的绘制来源是容器对 OnDraw 的调用。
3、无窗口控件重绘必须调用容器的 Invalidate 方法,由容器再次调用控件的 OnDraw 方法执行重绘,不能使用任何窗口相关的API,也不能在 OnDraw 外部绘制。
4、有窗口控件就是一个标准的窗口,所以按照 WM_PAINT 方式绘制一个窗口,可以使用所有的窗口API。
5、所有窗口在大多数情况下都应该在 WM_PAINT 里面执行所有的绘制任务,但不是绝对的,有一些特殊的需求一般在 WM_PAINT 之外绘制,例如用鼠标选择一段文字时文字的背景和前景色变成高亮状态、编辑控件的光标闪烁等等,请记住一个原则,只要是不怕被消掉的就可以在外部绘制,文字高亮在窗口失去焦点时就可以失效,闪烁的光标通过定时器触发时再绘制,它们都不怕被消掉。问题是你的需求不符合这个原则,所以不应该放到外部绘制。还是 SJDEV 说的,你的每一次鼠标操作都应该产生一些数据保存起来,在 OnDraw 中绘制这些数据,这种做法不会导致被擦除。
6、还有一些概念,我都不知道该如何解释起。至于 CS_OWNDC 的作用,在你搞明白基本概念后,再去看看MSDN的解释就能理解了。
1、ATL制作的控件可以是有窗口的,也可以是无窗口的,你的是哪一类?
2、不管有没有窗口,你只需重载OnDraw方法,并且用参数提供的HDC来绘制,ATL库内部屏蔽了有窗口和无窗口控件绘制之间的区别,有窗口控件的绘制来源是WM_PAINT消息,无窗口控件的绘制来源是容器对 OnDraw 的调用。
3、无窗口控件重绘必须调用容器的 Invalidate 方法,由容器再次调用控件的 OnDraw 方法执行重绘,不能使用任何窗口相关的API,也不能在 OnDraw 外部绘制。
4、有窗口控件就是一个标准的窗口,所以按照 WM_PAINT 方式绘制一个窗口,可以使用所有的窗口API。
5、所有窗口在大多数情况下都应该在 WM_PAINT 里面执行所有的绘制任务,但不是绝对的,有一些特殊的需求一般在 WM_PAINT 之外绘制,例如用鼠标选择一段文字时文字的背景和前景色变成高亮状态、编辑控件的光标闪烁等等,请记住一个原则,只要是不怕被消掉的就可以在外部绘制,文字高亮在窗口失去焦点时就可以失效,闪烁的光标通过定时器触发时再绘制,它们都不怕被消掉。问题是你的需求不符合这个原则,所以不应该放到外部绘制。还是 SJDEV 说的,你的每一次鼠标操作都应该产生一些数据保存起来,在 OnDraw 中绘制这些数据,这种做法不会导致被擦除。
6、还有一些概念,我都不知道该如何解释起。至于 CS_OWNDC 的作用,在你搞明白基本概念后,再去看看MSDN的解释就能理解了。
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询