码迷,mamicode.com
首页 > 编程语言 > 详细

MFC学习——“逃跑”按钮的实现

时间:2016-04-29 19:31:55      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

如何设计对话框程序上的“逃跑”按钮,即每当鼠标移动到Btn上面的时候就会自动跑到另外一个地方,看上去鼠标好像永远无法点中?

讨巧:设置鼠标WM_MOUSEMOVE的响应函数用于捕获鼠标移动操作,每当鼠标移动到btn上就修改属性隐藏,同时修改另一个btn的属性为显示,造成btn自动“逃跑”的假象。

步骤:

1、创建基于对话框的应用程序

新建-MFC项目-选择“基于对话框”就可以了,然后就会得到含有“OK”和“Cancel”默认按钮的对话框,删掉默认按钮,然后从右侧弹出的工具栏中拖动button控件放置到对话框中,设置caption;如果想修改字体则要选中对话框整体,在属性最下面有font选项,设计完成之后直接复制控件得到IDC_BUTTON2,如图:

技术分享

2、为控件添加类CBtn,绑定变量

利用类向导添加CButton的派生类的CBtn如下图

技术分享

分别右键两个按钮,为按钮增加CBtn类型的变量如图:

技术分享技术分享

随后为两个空间分别绑定变量m_btn_1和m_btn_2,类型均为CBtn

3、设置按钮初始化,添加WM_MOUSEMOVE响应代码
为了实现鼠标移动到某个按钮上时,自动实现自身的隐藏,同时显示另一个控件,在类CBtn中添加一个成员变量CBtn* m_pBtn用来保存另一个控件的地址,这样在一个控件的响应过程中就可以操控另一个控件。这里需要注意的是,只能为类添加消息响应函数,因此m_pBtn应该设置为类CBtn的成员。
在对话框对象创建完毕要进行显示时,可以在CRunBtnDlg类的OnInitDialog函数中添加初始化代码:

	// TODO: Add extra initialization here

	m_btn_1.m_pBtn = &m_btn_2;
	m_btn_2.m_pBtn = &m_btn_1;

添加CBtn的WM_MOUSEMOVE消息响应函数:

// CBtn message handlers

void CBtn::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);
}
4、运行测试

技术分享

初始界面显示两个按钮,需要设置一个为隐藏,在按钮的属性页面设置visible为false即可

技术分享

最终结果:

技术分享技术分享

总结:

  • MFC中的控件作为资源必须绑定特定的类量和变量才能够实现,我们通过变量来操作控件的行为和和属性;
  • 事件响应可以为类和变量添加,但是消息响应必须为类添加,控件IDC_BUTTON1是不能设置WM_MOUSEMOVE的响应的;
  • 对话框MFC中的控件变量m_btn_1/2是直接作为CRunBtnDlg的成员而存在,但是可以通过设置其为CBtn类型指定只有按钮空间响应鼠标移动,只需要指定成员变量的类型就可以区分出消息响应的范围;
  • 如果直接在类CRunBtnDlg中设置WM_MOUSEMOVE的响应,会导致鼠标移动到对话框范围即会响应。


MFC学习——“逃跑”按钮的实现

标签:

原文地址:http://blog.csdn.net/sinat_20265495/article/details/51232045

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!