十万火急:VC中,能不能集中处理多个按钮(控件)的事件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十万火急:VC中,能不能集中处理多个按钮(控件)的事件?相关的知识,希望对你有一定的参考价值。

是这样的,在VC中,如果一个Dialog上有多个按钮,则每双击一个按钮,就会自动添加与之对应的消息,比如:OnBnOKClick(),然后,在对话框类,加上了public的afx_msg,以及在实现*.cpp里,添加了消息映射

但是,如果对话框上按钮多,岂不是要为每个按钮(控件)都添加消息处理函数?

能不能为每个同类型的控件,比如按钮,都映射同一个消息函数,(比如我自己添加的BtnClicked()),根据按钮的ID号来进行判断,当前按下的是哪个按钮并处理?

我试过了,用以下方法,没有任何反应:
void CDemoDlg::BtnClicked()

switch(GetCtlID())

case ONOK:
MessageBox("按下的OK按钮");
break;
case ONCANCEL:
MessageBox("按下的CANCEL按钮");
break;



有其他办法吗?还请各位前辈不吝赐教为谢!
分不是问题,但急于要解决。
//////////////////////感谢语:///////////////////////////////////////////////
首先,感谢所有热心回答的前辈,特别是三、四楼的回答,都可行,但是让我很为难,不好采取哪位的为答案
不过,四楼的方法,要重载一个虚函数,还有那wParam我一直没弄明白,而我之所以想要集中处理的原因是,除了我自己声明的函数以外,不想加其他任何函数
另外,三楼的方法,确实是我见所未见的方法,可以通过直接修改Resource.h里的控件序列,随心所欲达到自己的要求。并且,三楼的方法一试就成功,没有走弯路,消息映射明确,通过看MSDN,还让我终于知道了MFC那几个该死的宏为什么要那样写。
所以,只有三楼的方法达到了我的要求,我就采纳吧!
也非常感谢各位前辈,小弟的编程路上,少不了各位高人的悉心指导!
////<=======================================

ON_CONTROL_RANGE(BN_CLICKED, 1000, 1005, OnButton)//1000-1005是上面自动添加的按扭ID
在H文件“protected:”下面加上
afx_msg void OnButton(UINT ID);
在CPP文件写上函数体:
void Form::OnButton(UINT ID)

switch(ID)

case 1000:
MessageBox("你按了第一个按扭。");
break;
case 1001:
MessageBox("你按了第二个按扭。");
break;



关键在于ON_CONTROL_RANGE咋个宏 具体的使用可以去查看MSDN
参考技术A 在消息映射时把响应函数都设成一样就好了
ON_BN_CLICKED(IDC_xxx, BtnClicked);
参考技术B 添加虚函数DefWindowProc

LRESULT CDemoDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)

if (message==WM_COMMAND)

//wID就是按钮控件的id,一般你的按钮id最好是连续的在一个范围内,
然后只要id在这个范围内,我们就认为是按钮的消息,否则是其他控件
发出的消息
int wID =LOWORD(wParam);



return CDialog::DefWindowProc(message, wParam, lParam);
参考技术C 三楼的方法确实是第一次听说,长见识了。
四楼的思路跟我相同,不过我记得可以直接添加响应WM_COMMAND消息的函数吧?反正这种方法肯定是可以的。
参考技术D 在系统自动生成代码中的MSG MAP(消息地图)部分把多个控件的事件处理函数定义为同一个 第5个回答  2011-01-17 我也遇到过类似问题,可能是ACCESS支持的不好吧,
我的解决办法是还是分而治之,我定义了几个CRecordSet类,每个CRecordSet类对应数据库的一张表,程序中要更新数据的时候,分开来对各个CRecordSet类操作。

以上是关于十万火急:VC中,能不能集中处理多个按钮(控件)的事件?的主要内容,如果未能解决你的问题,请参考以下文章

VC 对话框最小化 最大化

VC MFC 框架中 添加按钮控件

VC++(MFC)中动态创建和管理按钮控件,怎么做?

c#datagridView自定义控件问题,能不能实现一个单元格放多个button按钮

MFC中想要按一下按钮使一个静态控件变量加上1。我用以下代码编译能通过,但是不能运行,会出错。高手帮下

如何在VC++6.0下删除一个按钮控件?