`
txf2004
  • 浏览: 6873288 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

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星期的 经验虽然不专业但是 希望能帮助大家 。。。。错误的地方高手指出来

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics