为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
哔哔one 2023-04-22 18:14:43
是这样的,在VC中,如果一个Dialog上有多个按钮,则每双击一个按钮,就会自动添加与之对应的消息,比如:OnBnOKClick(),然后,在对话框类,加上了public的afx_msg,以及在实现*.cpp里,添加了消息映射但是,如果对话框上按钮多,岂不是要为每个按钮(控件)都添加消息处理函数?能不能为每个同类型的控件,比如按钮,都映射同一个消息函数,(比如我自己添加的BtnClicked()),根据按钮的ID号来进行判断,当前按下的是哪个按钮并处理?我试过了,用以下方法,没有任何反应:void CDemoDlg::BtnClicked(){switch(GetCtlID()){case ONOK:MessageBox("按下的OK按钮");break;case ONCANCEL:MessageBox("按下的CANCEL按钮");break;}}有其他办法吗?还请各位前辈不吝赐教为谢!
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

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

查看完整回答
反对 回复 2023-04-26
?
MYYA

TA贡献1868条经验 获得超4个赞

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

 


查看完整回答
反对 回复 2023-04-26
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我也遇到过类似问题,可能是ACCESS支持的不好吧,
我的解决办法是还是分而治之,我定义了几个CRecordSet类,每个CRecordSet类对应数据库的一张表,程序中要更新数据的时候,分开来对各个CRecordSet类操作。

查看完整回答
反对 回复 2023-04-26
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信