请教用控件实现扑克牌序列的办法

YUNAJAPAN 2007-02-11 11:03:53
我用20个CStatic控件排一排显示扑克的bmp图,从左到右依次重叠,右边最高。但是我用数组从0到19 create、setbitmap之后的初始状态是好的,但是一点牌就跑到最上面来了,并且接受消息的顺序正好是反的,即一张牌被覆盖了一半,应该只点没覆盖的才响应,但是它整个区域都响应,不知如何做才能达到像QQ游戏里面的那种效果?
1.点击之后改变了叠放次序;2.重叠区域消息响应如何更改?
...全文
250 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CharlesPrince 2007-02-14
  • 打赏
  • 举报
回复
好的方法是使用一种结构体:
struct YouCard
{
CRect CardRect;
CBitmap CardBmp;
BYTE CardLayer;
}

初始化时给它赋于相应的值
在OnLButtonClick函数中进行判断
GetCursorPos
判断是否在同一层
....
TurkeyCock 2007-02-13
  • 打赏
  • 举报
回复
用一个数组存放控件指针,点击时记住位置,再在OnPaint()里按顺序从左到右把20张牌重画一遍,被点击的牌画的时候把位置挪一下
不过不知道会不会有闪烁问题
raymonzhao 2007-02-13
  • 打赏
  • 举报
回复
子类化CStatic.PreTranslateMessage里做处理试试。设置一个标志量,控件是否在最上面,不在的话就不响应所有消息。如果你是Dlg的话,在Dlg的里面处理应该也可以。
YUNAJAPAN 2007-02-13
  • 打赏
  • 举报
回复
呵呵,我就是想偷懒哈,我在网上下了别人做的控件,一张牌一个,也是叠着放,它就蛮好的,不知道是怎么解决这个问题的,不过对鼠标的响应比较迟钝,而且有点小bug。
我想应该可以用控件实现的啊,像windows自带的纸牌,我就觉得是用控件实现的。
东文-桑晨 2007-02-12
  • 打赏
  • 举报
回复
你使用的是控件,当然会因为获得焦点而跑上来的。

用绘图的方法,在鼠标的WM_LButtonDown消息里面使用GetCursorPos();获取鼠标点击的点,
使用PtInRect()判断点击的是哪个区域,然后再响应
happyness44 2007-02-12
  • 打赏
  • 举报
回复
不要用控件,直接画图(用数组储存牌的位置),点击用PtInRegion判断区域做响应

15,976

社区成员

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

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