第八章、对话框(二)

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属性勾选去掉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身影王座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值