【GDI】关于BitBlt和TransparentBlt2函数的问题

卢超群 2014-02-04 07:07:59
最近在编制一个五子棋程序,使用C语言,不借助MFC,完全用WIN32 API和GDI来写,但是出现了一些问题。背景交代完毕,下一段。
程序中我首先创建了个窗口,然后在WM_PAINT响应中用BitBlt函数将棋盘图片画在了窗口上,然后把落子的操作放在WM_LBUTTONDOWN响应中,使用TransparentBlt2将黑白棋画在窗口上,但是如果鼠标乱晃两下,或者是鼠标移动到最小化等按钮上,或者是菜单等别的地方一点,棋子就突然消失了,但是棋盘还在!
因为我写了避免在同一个位置落两次子的代码,所以可以判断,消失棋子的地方不能再落子,也就是棋子还在!始终搞不明白是为什么。

我用如下方法,均失败:
1.在WM_PAINT响应中加入扫描棋盘棋子重新绘制一遍的代码(之前落的棋有记录),还是不行。
2.在落棋的代码中加入先TransparentBlt2把图画到棋盘上,再BitBlt加载图片,不行。。

求,问题所在以及解决方法!如需更详细的代码,我会发上来。新人第一次发帖,求赐教!
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2014-02-04
  • 打赏
  • 举报
回复
"一单击,就调用PAINT去画棋子" 一单击,记录棋子位置,Invalidate (), 就可以
卢超群 2014-02-04
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
"那如何在WM_PAINT中写入响应鼠标点击而下棋呢?" "响应鼠标点击" 只记录下点击位置(黑白方).不必画. 在WM_PAINT中加上 绘制 当前落子 的代码.
还有个问题,这样的话,如何实现落子的即时性?一单击,就调用PAINT去画棋子。
schlafenhamster 2014-02-04
  • 打赏
  • 举报
回复
"那如何在WM_PAINT中写入响应鼠标点击而下棋呢?" "响应鼠标点击" 只记录下点击位置(黑白方).不必画. 在WM_PAINT中加上 绘制 当前落子 的代码.
卢超群 2014-02-04
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
不能"WM_LBUTTONDOWN响应中,使用TransparentBlt2将黑白棋画在窗口上," 所有绘制代码必须在paint中,否则窗口变化后棋子必然消失.
那如何在WM_PAINT中写入响应鼠标点击而下棋呢?求思想。 还有为什么会消失还是不明白,我的使用方式是错的吗?
schlafenhamster 2014-02-04
  • 打赏
  • 举报
回复
不能"WM_LBUTTONDOWN响应中,使用TransparentBlt2将黑白棋画在窗口上," 所有绘制代码必须在paint中,否则窗口变化后棋子必然消失.

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧