您的位置:程序门 -> vc/mfc -> 界面



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教用控件实现扑克牌序列的办法[已结贴,结贴人:yunajapan]
发表于:2007-02-11 23:03:53 楼主
我用20个cstatic控件排一排显示扑克的bmp图,从左到右依次重叠,右边最高。但是我用数组从0到19   create、setbitmap之后的初始状态是好的,但是一点牌就跑到最上面来了,并且接受消息的顺序正好是反的,即一张牌被覆盖了一半,应该只点没覆盖的才响应,但是它整个区域都响应,不知如何做才能达到像qq游戏里面的那种效果?
1.点击之后改变了叠放次序;2.重叠区域消息响应如何更改?
发表于:2007-02-12 15:32:531楼 得分:10
不要用控件,直接画图(用数组储存牌的位置),点击用ptinregion判断区域做响应
发表于:2007-02-12 16:18:482楼 得分:10
你使用的是控件,当然会因为获得焦点而跑上来的。

用绘图的方法,在鼠标的wm_lbuttondown消息里面使用getcursorpos();获取鼠标点击的点,
使用ptinrect()判断点击的是哪个区域,然后再响应
发表于:2007-02-13 20:05:303楼 得分:0
呵呵,我就是想偷懒哈,我在网上下了别人做的控件,一张牌一个,也是叠着放,它就蛮好的,不知道是怎么解决这个问题的,不过对鼠标的响应比较迟钝,而且有点小bug。
我想应该可以用控件实现的啊,像windows自带的纸牌,我就觉得是用控件实现的。
发表于:2007-02-13 22:06:484楼 得分:10
子类化cstatic.pretranslatemessage里做处理试试。设置一个标志量,控件是否在最上面,不在的话就不响应所有消息。如果你是dlg的话,在dlg的里面处理应该也可以。
发表于:2007-02-13 22:51:005楼 得分:10
用一个数组存放控件指针,点击时记住位置,再在onpaint()里按顺序从左到右把20张牌重画一遍,被点击的牌画的时候把位置挪一下
不过不知道会不会有闪烁问题
发表于:2007-02-14 12:22:586楼 得分:10
好的方法是使用一种结构体:
struct   youcard
{
crect   cardrect;
cbitmap   cardbmp;
byte   cardlayer;
}

初始化时给它赋于相应的值
在onlbuttonclick函数中进行判断
getcursorpos
判断是否在同一层
....


快速检索

最新资讯
热门点击