vs2013版MFC按钮点击无反应,执行不到相应的事件处理程序

     大家在使用MFc编程的时候,可能会遇到:点击添加的按钮无反应,或者执行不到相应的事件处理程序。以笔者的经验来看,出现这种问题多半是由于该按钮的底层属性值错误,或者该按钮的ID号与相应的ID值不对应造成的。下面笔者举个简单的例子,来说明这些问题。

1、 首先我们给按钮添加事件处理程序,这里按钮为“测试”,如图:


图1 鼠标右击按钮



图2 添加事件处理程序

图2在事件处理程序里面添加一个断点,待会儿点击该按钮后观察是否会触发该断点;如果触发该断点,那么说明“测试”按钮与该事件处理程序是对应的,否则不是对应的。下面运行该程序,程序界面如下图:


图3 程序运行结果

但是点击该按钮后,发现并没有触发断点,这说明该按钮并没有与事件处理程序对应起来。下面我们来找到问题所在,并且解决这个问题。

2、 首先调出该按钮的底层属性定义,以及调出该按钮的ID号定义,方法是通过查找整个解决方案查找该按钮的ID号出现的地方,比如在本列中查找的ID号为“ID_TEST”,会发现ID号出现的地方只有三个,有一个是按钮底层属性定义,有一个是ID号声明定义。分别如下图所示:



图4 在“整个解决方案”中查找“ID_TEST”



图5 “ID_TEST”出现在“测试”按钮的底层属性定义



图6 “ID_TEST”出现在其声明定义的地方

通过比较图5和图6我们发现,图5中按钮的底层属性值为32938,图6中ID_TEST的值为32938,虽然这两个值是相等的,但是通过对比图6的上下文我们还发现:还有几个其他的按钮ID值也为32938,。所以这就会造成一个ID值会对应多个ID号,对应了多个按钮,对应了多个按钮的事件处理程序。至于它到底对应了哪个按钮的事件处理程序,这里我们不做讨论。

找到了问题的所在,因此解决方法是:将按钮的底层属性值和按钮ID的值都改为同一个未使用的数值,然后清理解决方案、重新生成解决方案。比如这里可以都改为32939,如下图所示:



图7 将按钮底层属性值改为 32939



图8 将ID_TEST的值改为32939



图9 清理解决方案、重新生成解决方案后,点击按钮触发的断点

问题就这样解决啦,赶脚是不是很简单啊!要是有帮助到亲的话,可不要忘了给皮皮点个赞呢吐舌头


  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Windows中,可以使用MFC(Microsoft Foundation Class)框架来创建应用程序,包括窗口、按钮等控件。 要监听MFC程序的按钮事件,可以按照以下步骤进行: 1. 打开MFC程序的源代码。可以在Visual Studio中打开项目,然后找到对应的按钮所在的窗口类。 2. 在窗口类的消息映射表中找到对应的按钮消息。在源代码中,会存在一个类似于`BEGIN_MESSAGE_MAP`的宏,用于定义消息映射表。 3. 在消息映射表中添加按钮消息的处理函数。可以使用类似于`ON_BN_CLICKED`的宏来定义按钮点击的处理函数。在函数中可以编写具体的事件处理逻辑。 4. 在处理函数中编写对应的逻辑代码。根据具体需求,可以进行一些操作,例如更新界面、执行特定的功能等。 例如,如果要监听一个名为`m_btnOk`的按钮点击事件,可以按照以下步骤进行: 1. 打开MFC程序的源代码。 2. 在窗口类的消息映射表中找到对应的按钮消息。可以找到类似于`BEGIN_MESSAGE_MAP(CMyWnd, CWnd)`的宏。 3. 在消息映射表中添加按钮消息的处理函数。例如,可以添加`ON_BN_CLICKED(IDC_BTN_OK, OnBtnOkClicked)`这样的宏。其中`IDC_BTN_OK`是按钮的ID,`OnBtnOkClicked`是处理函数的名称。 4. 在处理函数`OnBtnOkClicked`中编写具体的逻辑代码。例如,可以在处理函数中添加代码来更新界面或执行某个操作。 总之,要监听MFC程序的按钮事件,需要在源代码中找到对应按钮消息的处理函数,并在处理函数中编写具体的逻辑代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值