您的位置:首页 > 其它

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

2008-07-29 11:20 323 查看
孙鑫老师在讲VC的过程中,曾实现“逃跑按钮的效果”,主要思想是,在基于对话框的工程中,可以通过新建一个类CNewBtn1(名字可以任意命名),让该类继承CButton类,然后在对话框类中针对目标按钮新建一个成员变量(m_btn1),通过选择成员变量的类型为新建的继承于CButton类CNewBtn1,这样,对话框中的按钮就和类CNewBtn1就关联起来,这样对话框上的按钮就可以接受Windows的消息了。孙鑫老师在讲座中说可以同SetWindowPos来实现,但是没有给出具体代码,下面就是我的实现思想和步骤。
这里还是按照孙鑫老师讲座里面那样,增加一个WM_MOUSEMOVE消息句柄函数。
在CNewBtn1中新建两个成员变量m_btn_x,m_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;
}
运行即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: