最近在用SDK写俄罗斯的时候遇到了很多问题 ...点亮GDI盲区值得看-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

最近在用SDK写俄罗斯的时候遇到了很多问题 ...点亮GDI盲区值得看

简介:              1 .   有效区域无效区域                              调用InvalidateRect之后会使矩形区域编程无效区域 会导致指定区域重绘  如果不调用 ValidateRect那么 就会导致那个矩形区域无法绘制              2.

             1 .   有效区域无效区域 

                            调用InvalidateRect之后会使矩形区域编程无效区域 会导致指定区域重绘  如果不调用 ValidateRect那么 就会导致那个矩形区域无法绘制

             2.    句柄问题  用完一定要释放   我在做俄罗斯的过程中 发现运行一段时间后 就出现一场 整个屏幕 卡住并且运行停止   结果Debug了 2天 没结果

                最后终于明白原来是CreateCompatibleDC  DC没释放  

               要释放如果不的话 你的gdi对象数目会不停的增加 到了10000就崩掉了   也就出现了我的程序崩溃 不断刷屏  

              如果GetDC那么  一定要 ReleaseDC释放 DC  

             如果CreateCompatibleDC那么 一定要 调用DeleteDC  

              如果GDI对象 例如 画刷位图 。。。。用完之后一定要  DeleteObject 删除 GDI对象  

         3.  在从欢迎界面 进入游戏界面的时候 发送WM_PAINT消息的问题   。。。我们会发现 发送了WM_PAINT消息但是 却不能按照我们的要求 绘制指定的界面

          但是只要窗体一被遮住问题立马解决 ,这个问题很纠结 原理我也不清楚(高手解答。。。。。嘿嘿)

          这时候 解决的方法是我们自定义一个 背景绘制的消息处理 。。 然后在WM_自定义里面 发送WM_PAINT消息 那么 就可以间接的实现界面的切换功能    

           4.   所谓的虚拟界面 就是通过位图实现按钮的功能  比如说 一个Button 我们只需要绘制2张不同颜色的图片 然后响应WM_MOUSEMOVE喝 WM_LBUTTON事件  

               进行2张位图的切换 就可以完成虚拟界面 其实SDK很多时候都用到这个  

 

                    以上是我1星期的 经验虽然不专业但是 希望能帮助大家 。。。。错误的地方高手指出来

 

   

  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: