菜鸟继续问一个关于MFC界面编程的问题 我现在想用一个函数关联到多个控件上去,应该怎么处理?平常只关联一个控件比较好办,双击该控件就行了。但如果现在多个控件关联一个函数,我就不知道怎么办了。希望哪位大大能不吝赐教啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同一类型的控件的话可以使用ON_CONTROL_RANGE(),ID号码要连续 //响应WM_COMMAND消息BOOL CDlgX::OnCommand(WPARAM wParam, LPARAM lParam){ if(wParam==IDC_BUTTON1) MessageBox("按钮1"); if(wParam==IDC_BUTTON2) MessageBox("按钮2"); if(wParam==IDC_BUTTON3) MessageBox("按钮3"); if(wParam==IDC_BUTTON4) MessageBox("按钮4");} 我用的四个连续的 radio控件。目的是让着四个控件关联一个函数。关键我怎么建立一个函数 和这四个控件关联起来呢?还请兄台告诉我如何具体操作。不胜感激。 1.2#楼的就可以当然也可以用ON_CONTROL_RANGE(),前提是4个radio控件id要连续,比如是0x100 0x101...等增加宏ON_CONTROL_RANGE(BN_CLICKED,IDC_RADIO1,IDC_RADIO4,memberFxn )处理消息原型:afx_msg void memberFxn(UINT id);实现void CDlgXXXX::memberFxn(UINT id){ switch ( id ) { case IDC_RADIO1: AfxMessageBox("RADIO1 选中"); break; case IDC_RADIO2: AfxMessageBox("RADIO2 选中"); break; ............... } } 和用ClassWiazard类向导关联单个控件不同,需要手动操作,以连续四个控件为例,具体步骤如下:1、在.h文件中找到DECLARE_MESSAGE_MAP()宏名,在这个宏名上面添加一句声明函数。 afx_msg void xxx(UINT uID); DECLARE_MESSAGE_MAP()2、在.cpp文件中添加函数体 void CCalculatorDlg::xxx(UINT uID) { UINT index=uID-IDC_NUM_0; CString num; num.Format(_T("%d"),index); AfxMessageBox(num); }3、在.cpp文件中找到BEGIN_MESSAGE_MAP、END_MESSAGE_MAP宏,在这二个宏名中间添加消息映射BEGIN_MESSAGE_MAP(CDlgDlg, CDialog) ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC_NUM_3,xxx)END_MESSAGE_MAP() 第一个参数 事件 第二个参数 控件组的第一个id 第三个参数 控件组的最后一个id 第四个参数 响应事件的方法 MFC的radio控件一般不这么玩,应该用最简单的方法:指定第一个radio的group,然后建立一个成员变量,用它来得到结果。 如何使用CRecordset类对数据库进行增、删、改操作 LoadImage如何从外部exe文件中提取icon? Advanced Installer 使用问题 用Direct3D画三维图形如何转换坐标? 如何在VC里面制作类似web页框架结构? 急问!!怎样实现菜单项的动态装入!?高分在线等!! 请问一个SQL SELECT语法的问题。 奇怪的问题!HELP! CSDN的BoundsChecker是forDephi的,还要注册码 程序如何在来宾用户下获取写文件和注册表的权限???? 求串口通信编程实践(龚建伟)源代码 CMFCToolBar空间问题:
BOOL CDlgX::OnCommand(WPARAM wParam, LPARAM lParam)
{
if(wParam==IDC_BUTTON1) MessageBox("按钮1");
if(wParam==IDC_BUTTON2) MessageBox("按钮2");
if(wParam==IDC_BUTTON3) MessageBox("按钮3");
if(wParam==IDC_BUTTON4) MessageBox("按钮4");
}
我用的四个连续的 radio控件。目的是让着四个控件关联一个函数。关键我怎么建立一个函数 和这四个控件关联起来呢?还请兄台告诉我如何具体操作。不胜感激。
当然也可以用ON_CONTROL_RANGE(),前提是4个radio控件id要连续,比如是0x100 0x101...等
增加宏
ON_CONTROL_RANGE(BN_CLICKED,IDC_RADIO1,IDC_RADIO4,memberFxn )
处理消息原型:
afx_msg void memberFxn(UINT id);
实现
void CDlgXXXX::memberFxn(UINT id)
{
switch ( id )
{
case IDC_RADIO1:
AfxMessageBox("RADIO1 选中");
break;
case IDC_RADIO2:
AfxMessageBox("RADIO2 选中");
break;
............... }
}
1、在.h文件中找到DECLARE_MESSAGE_MAP()宏名,在这个宏名上面添加一句声明函数。
afx_msg void xxx(UINT uID);
DECLARE_MESSAGE_MAP()
2、在.cpp文件中添加函数体
void CCalculatorDlg::xxx(UINT uID)
{
UINT index=uID-IDC_NUM_0;
CString num;
num.Format(_T("%d"),index);
AfxMessageBox(num);
}
3、在.cpp文件中找到BEGIN_MESSAGE_MAP、END_MESSAGE_MAP宏,在这二个宏名中间添加消息映射
BEGIN_MESSAGE_MAP(CDlgDlg, CDialog)
ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC_NUM_3,xxx)
END_MESSAGE_MAP()
第一个参数 事件
第二个参数 控件组的第一个id
第三个参数 控件组的最后一个id
第四个参数 响应事件的方法