双缓存 GDI 与 GDI+混用出现的问题(转)

前几天写一个DirectUIDraw部分, 有一段编码的思路是这样的: 为了防止闪烁采用双缓存后hMemDC, 为了方便绘制png图标, 采用GDI+, 简单的绘制都是GDI绘制的, 为了更有效利用hMemDC, 每次生成hMemDC生成的位图是Clipbox大小的, 在SetViewportorgex调整视窗坐标, 在绘制对象过程中, 通过RectVisible判断是否可进行绘制, 开始用用bmp皮肤的时候(此时没有必要使用GDI+) 绘制效率很高, 而且没有任何bug, 但采用了GDI+之后, 总是有绘制不到的地方, 尤其是反复invalidaterect效果更差, 后来发现问题出现的原因是, 只要采用GDI+绘制后, 后hMemDC的Clipbox就发生变化了, 接下来再采用RectVisible测试, 很多需要绘制的地方就绘制不到了, 当Graphics释放hMemDC后, 其Clipbox自动恢复. 因此上面问题的修改方法也很简单, 要么绘制都采用gdi+ 要么都是gdi 或者GDI+和GDI结合, 但不要交替混一起 一个绘制完成后, 另一个再接手

想想这也不是GDI+ 或GDI的bug, 假如让我来完成类似Graphics模块, 为了优化绘制我也会调整传入HDC的映射坐标的, 而在我占用HDC的时候 别的模块再对HDC进行访问, 我也不会对调用结果负责的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值