VC逃跑按钮SetWindowPos实现——看孙鑫老师教程的启发

   孙鑫老师在讲VC的过程中,曾实现“逃跑按钮的效果”,主要思想是,在基于对话框的工程中,可以通过新建一个类CNewBtn1(名字可以任意命名),让该类继承CButton类,然后在对话框类中针对目标按钮新建一个成员变量(m_btn1),通过选择成员变量的类型为新建的继承于CButtonCNewBtn1,这样,对话框中的按钮就和类CNewBtn1就关联起来,这样对话框上的按钮就可以接受Windows的消息了。孙鑫老师在讲座中说可以同SetWindowPos来实现,但是没有给出具体代码,下面就是我的实现思想和步骤。

这里还是按照 孙鑫 老师讲座里面那样,增加一个WM_MOUSEMOVE消息句柄函数。

   CNewBtn1中新建两个成员变量m_btn_xm_btn_y,分别用来记录对话框按钮的原始坐标,再建立一个BOOL类型的成员变量m_bIsMoved,再构造函数中初始化为True,它用来控制是否按钮的移动。在对话框的初始函数OnInitDialog()中添加如下代码:

CRect rect;

       GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rect);//获得窗口坐标

       ScreenToClient(&rect);//坐标转换为客户端窗口坐标

       m_btn1.m_btn1_x=rect.left;

       m_btn1.m_btn1_y=rect.top;

WM_MOUSEMOVE消息句柄函数OnMouseMove(UINT nFlags, CPoint point)中添加如下代码:

if(m_bIsMoved)

       {

              SetWindowPos(NULL,m_btn1_x,m_btn1_y+50,0,0,SWP_NOZORDER|SWP_NOSIZE);

              m_bIsMoved=false;

       }

       else

       {

              SetWindowPos(NULL,m_btn1_x,m_btn1_y,0,0,SWP_NOZORDER|SWP_NOSIZE);

              m_bIsMoved=true;

       }

运行即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值