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

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

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

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

图1 鼠标右击按钮


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

图2 添加事件处理程序

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

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

图3 程序运行结果

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

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


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

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


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

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


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

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

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

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


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

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


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

图8 将ID_TEST的值改为32939


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

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

问题就这样解决啦,赶脚是不是很简单啊!要是有帮助到亲的话,可不要忘了给皮皮点个赞呢vs2013版MFC按钮点击无反应,执行不到相应的事件处理程序