8.1逃跑按钮的实现
首先建立一个基于对话框的应用程序的MFC工程,然后发现ClassView中有CAboutDlg,CTestApp,CTestDlg三个类。
CTestDlg它是从CDialog类派生出来的一个类,该应用程序的窗口就是一个对话框界面。如图。
逃跑按钮:在Test程序的对话框主界面上增加一个按钮,当单击这个按钮时,这个按钮就会移动到另一个位置。
1、首先删除该对话框上面的所有控件;然后添加一个按钮控件,将其Caption改为“你能抓住我吗?”;接着我们想改变按钮文本字体,在该属性对话框上面没有;打开对话框的属性,General->单击Font,利用此界面就可以设置对话框窗体以及上面所有子控件上面的字体。如图。
2、在对话框资源中,复制刚才添加的那个按钮;让其中的一个隐藏,让另一个显示;鼠标移动到显示的按钮上面时,将该按钮隐藏,另一个显示出来。如图。
3、如果让CTestDlg对话框类捕获鼠标消息,一旦鼠标在对话框中移动,按钮就会上下移动;所以鼠标的消息需要由按钮窗口来捕获;创建一个CButton类,将按钮与该类的成员变量关联,从而把按钮控件与一个自定义按钮窗口类关联起来了。
4、添加一个BUtton类:ClassWizard->Add Class->New->新类名字CNewButton,基类CButton->OK。如图。
5、为两个按钮关联两个成员变量:ClassWizard->Member Variables->IDC_BUTTON1->Add Variable->弹出对话框中,变量名m_btn1,变量类型CNewButton->OK
6、这个时候系统会弹出用用户确保TestDlg.h类中包含新类的头文件,单击确定。对话框上两个按钮控件与新类就关联起来了。同样地以同样的方法添加第二个按钮。
// CTestDlg dialog
#include "NewButton.h"
class CTestDlg : public CDialog
{
// Construction
7、让CNewButton类捕获鼠标移动消息:在CNewButton类上单击鼠标右键->Add Windows Message Hander->选中WM_MOUSEMOVE->add and Edit。
就添加了相应鼠标移动消息的响应函数。
8、OnMouseMove函数中完成一个按钮显示一个按钮隐藏的功能:
以参数SW_HIDE为参数调用ShowWindow函数,就可以让当前按钮隐藏。
这时为了让另一个按钮显示出来,需要知道另一个按钮所关联对象的地址,然后调用ShowWindow函数使其显示出来。解决办法:给CNewButton类定义一个CNewButton *成员变量,让它指向另一个按钮对象的地址。
这样当CTestDlg类初始化以及初始化CNewButton类对象时,该对象就有一个CNewButton *类型的成员变量。
然后在CTestDlg类的OnInitDialog函数最后,return之前添加:
m_btn1.m_pbtn=&m_btn2;
m_btn2.m_pbtn=&m_btn1;
OnMouseMove函数中添加:
void CNewButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ShowWindow(SW_HIDE);
m_pbtn->ShowWindow(SW_SHOW);
CButton::OnMouseMove(nFlags, point);
}
运行结果如图。
如果以开始就让其中一个按钮隐藏,就将其中一个按钮Visible属性勾选去掉。