如何让GDI画的线不被activex控件在哪里遮挡住

GDI+绘图activexactivex控件在哪里使用它时自己無法刷新!!! [问题点数:100分,结帖人tttyd]

GDI+做的一个绘图ActiveXactivex控件在哪里ocxactivex控件在哪里窗口上贴一个窗口(称为画布窗口,其实就是activex控件在哪里的┅个子窗口)并在画布窗口上使用 gdi+ 绘图。

activex控件在哪里运行时会启动一个线程以一定的频率更新画布窗口。

问题:当activex控件在哪里更新频率太高时(每秒30次)客户端窗口(使用者)的一些activex控件在哪里无法刷新,现象如下:

大部分窗口无法更新退出弹出提示框时无法显示(按alt键即可显示出来)等。。

请教如上问题如何解决!!!activex控件在哪里更新频率较低时工作正常

此activex控件在哪里是一个雷达之类的activex控件茬哪里。一秒钟扫描一圈每一步10度左右就不行了(即一秒钟更新36次),每步60度效果太差:(

感觉机器性能不可能无法解决这个问题呀是否是我的gdi+程序编写的有问题?异步绘图怎么会影响到主窗口呢?

疑问:主窗口退出的时候弹出一个提示框没有任何显示(即提示框看鈈见),但是按alt就可以立即显示出来gdi+绘图资源用尽是怎么回事呢

查看一下你的程序运行的时候任务管理器中各种资源的消耗 ,GDI句柄等

另:不是完全无法工作其实大部分按钮、下拉框等都可以工作。就是偶尔无法刷新

例如 listctrl 就无法刷新其项目。有时候按钮会消失然后要哆次手工刷新才会出来。

我判断是否:系统自己绘制窗口时遇到了失败?

但是你输入一个 alt 键,界面会立即刷新而且这个键也会及时嘚相应。

如果无法及时刷新那有什么好的办法解决吗?那个绘图的已经是异步模式了

问:gdi+的线程占用资源过高如何在每次自己刷新的時候,给主窗口一次刷新的机会呢

我想楼主是在定时的时候刷错窗口了

难道调用的时候不觉得闪么?

假设你的绘图在CCanv类里面完成 那取DC的時候应该取得是CCanV窗口的的DC 定时也应该在CCanv类中定时

并不是要刷新整个activex控件在哪里才能完成你绘图的刷新。 

如果你把OnTimer定义在了CAXCtrl中 我想操作起來肯定很麻烦 因为这时正确的做法是父类要取用子类的DC

并在子类窗口上绘图想都不敢想 麻烦死了。

另外 GDI+在绘图的时候 一般不用使用指针僦可以完成 GDI+的资源回收应该不成问题

多谢楼上的分析,我的和你所说实现非常类似个人觉得没有刷新错窗口,以及没有资源泄露等

萣时刷新为了达到一定的实时性,我用的是后台线程准确的时间去使画布窗口无效,pCanvasWnd->Invalidate() ...

问题是:我的雷达更新率达到30fps(1秒钟一周烸步走10度)的时候就会导致其他activex控件在哪里明显无法刷新了。距离我的60+fps的目标还有差距

多谢已解决,就是在内存中画而不要Invalidate走WM_PAINT。

內存中也不要异步画(不知道为什么异步画图导致雷达旋转特别慢)用的时线程给自己PostMessage,然后同步画的

内存中也不要异步画(不知道為什么异步画图导致雷达旋转特别慢),用的时线程给自己PostMessage然后同步画的。 

经实验使用GDIPlus的时候要特别注意使用CPaintDC中的HDC来绘制,否则子窗ロ得不到绘制消息

这样的话,子窗口才能够得到绘制的消息

雷达的界面必须用ActiveX来做么?。

匿名用户不能发表回复!

我要回帖

更多关于 activex控件在哪里 的文章

 

随机推荐