怎样区别各个控件发送的消息 正在搞一个基于对话框的东西,设计了很多个按钮控件,想在不同的按键按下时在编辑框中输入不同的内容,但是不想用多个函数实现。想只用一个实现,不知道是不是可以,我的想法是按键发送的消息来区分(每个按键的ID是不同)是哪个按键按下的,然后进行相应的操作,但是查了好多函数好像没有。敬请高手支招。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是类似于SDK编写Windows程序的情况,自己实现WndProc()。但是在MFC中已经映射好了,不太好做 对于按钮控件来说,被单击的时候会父窗体发送BN_CLICKED消息,存在这五类按钮会向父窗体发送BN_CLICKED,下按按钮,单选按钮,复选按钮,三态复选按钮,自我绘制按钮。如果只是凭按钮ID来区分控件,可以这么做:case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);if(wmId==IBC_NAME){ if(wmEvent==BN_CLICKED) { //添加内容到编辑框 }} 使用ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn ) 你可以给每个控件都定义一个属于自己的消息然后在PreTranslateMessage中截获消息,再对每个控件做相应的处理! 还是手把手教你吧:1.在对话框头文件中加入如下消息声明:afx_msg void OnSerialBtn(UINT btnid);2.在消息映射中加入如下代码:BEGIN_MESSAGE_MAP(CAverageDlg, CDialog) ON_COMMAND_RANGE(IDC_BUTTON2,IDC_BUTTON4,&CAverageDlg::OnSerialBtn) //其中IDC_BUTTON2和IDC_BUTTON4之间按钮的ID值必须连续. //}}AFX_MSG_MAPEND_MESSAGE_MAP()3.定义如下消息体:void CAverageDlg::OnSerialBtn(UINT btnid){ if(btnid==IDC_BUTTON3) { MessageBox(L"你按下了BUTTON3"); } if(btnid==IDC_BUTTON4) { MessageBox(L"你按下了BUTTON4"); } }参数btnid用于区分哪个按钮按下了。 太复杂,也得不到好的效果,VC其实很简单,有很多好的办法,被我们不少"高手"神化了一个极简单的办法:1 如果按扭已有消息函数,将这些消息函数删除2 双击其中一个按扭,添加上消息函数,函数名随便定义,如Button13 双击其它按扭,在弹出的请输入消息函数名的对话框中将函数名改为先前定义的函数Button14 修改Button函数,使其用各按扭的ID区分按扭和执行相应动作void CCtmpDlg::OnButton1() { CString str; switch(GetFocus()->GetDlgCtrlID()) { case IDC_BUTTON1: str="1"; break; case IDC_BUTTON2: str="2"; break; case IDC_BUTTON3: str="3"; break; } SetDlgItemText(IDC_STATIC1,str); } 顶楼上,看完后我的第一反应也是GetDlgCtrlID()。 怎么让scrollview出现滚动条? 用VC写的BHO体积有多大? 怎样让CFormView中的控件随着View大小的改变而比例改变? std::vector<CString>有点奇怪 在全局函数中怎样得到窗口(基于对话框)的指针? DLL封装成OCX的问题 串口通信问题。 谁有CDib? 如何使程序暂停? 哪里可以找到MPEG-4的源代码 CSDN惊现骗子垃圾帐户名:shizhao188,举报一下 怎么改变菜单栏背景色?
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
if(wmId==IBC_NAME)
{
if(wmEvent==BN_CLICKED)
{
//添加内容到编辑框
}
}
然后在PreTranslateMessage中截获消息,再对每个控件做相应的处理!
1.在对话框头文件中加入如下消息声明:
afx_msg void OnSerialBtn(UINT btnid);
2.在消息映射中加入如下代码:
BEGIN_MESSAGE_MAP(CAverageDlg, CDialog)
ON_COMMAND_RANGE(IDC_BUTTON2,IDC_BUTTON4,&CAverageDlg::OnSerialBtn)
//其中IDC_BUTTON2和IDC_BUTTON4之间按钮的ID值必须连续.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3.定义如下消息体:
void CAverageDlg::OnSerialBtn(UINT btnid)
{
if(btnid==IDC_BUTTON3)
{
MessageBox(L"你按下了BUTTON3");
}
if(btnid==IDC_BUTTON4)
{
MessageBox(L"你按下了BUTTON4");
}
}
参数btnid用于区分哪个按钮按下了。
1 如果按扭已有消息函数,将这些消息函数删除
2 双击其中一个按扭,添加上消息函数,函数名随便定义,如Button1
3 双击其它按扭,在弹出的请输入消息函数名的对话框中将函数名改为先前定义的函数Button1
4 修改Button函数,使其用各按扭的ID区分按扭和执行相应动作
void CCtmpDlg::OnButton1()
{
CString str;
switch(GetFocus()->GetDlgCtrlID())
{
case IDC_BUTTON1:
str="1";
break;
case IDC_BUTTON2:
str="2";
break;
case IDC_BUTTON3:
str="3";
break;
}
SetDlgItemText(IDC_STATIC1,str);
}