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

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

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

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

我试过了,用以下方法,没有任何反应:
void CDemoDlg::BtnClicked()
{
switch(GetCtlID())
{
case ONOK:
MessageBox("按下的OK按钮");
break;
case ONCANCEL:
MessageBox("按下的CANCEL按钮");
break;
}
}

有其他办法吗?还请各位前辈不吝赐教为谢!

哔哔one
浏览 180回答 3
3回答

月关宝盒

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咋个宏 

MYYA

添加虚函数DefWindowProcLRESULT 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);} 

潇潇雨雨

我也遇到过类似问题,可能是ACCESS支持的不好吧,我的解决办法是还是分而治之,我定义了几个CRecordSet类,每个CRecordSet类对应数据库的一张表,程序中要更新数据的时候,分开来对各个CRecordSet类操作。
打开App,查看更多内容
随时随地看视频慕课网APP