MFC 同类多控件事件响应

RoynCheng 2017-11-09 09:23:13
举个例子:
在一个窗口上有3个EDIT控件,我想在EDIT的value发生变化时触发事件,但我现在只会创建3个事件,分别处理这3个EDIT。如果有N个EDIT那我就要创建N个事件?
我想问有什么方法可以用一个事件函数处理N个控件,函数内部采用switch(ID){case}的形式,以缩减代码量?
MFC接触不够深入,如果可以,尽量详细点,谢谢了
...全文
217 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RoynCheng 2017-11-10
  • 打赏
  • 举报
回复
引用 3 楼 lonelyhacker 的回复:

//假设有10个edit,要求edit的ID必须是连续的或者有规律可找的。

.h:
CEdit	m_edit[10];
afx_msg void OnKillfocusEdit(UINT nId);

.cpp
for(int i=0;i<10;i++)	
    DDX_Control(pDX, IDC_EDIT1+i, m_edit[i]);

ON_CONTROL_RANGE(EN_KILLFOCUS,IDC_EDIT1,IDC_EDIT10,OnKillfocusEdit)

void C111Dlg::OnKillfocusEdit(UINT nId)
{
       CString str;
        nId = nId - IDC_EDIT1;
        m_edit[nId].GetWindowText(str);
} 

ON_CONTROL_RANGE 要的就是这个,谢谢啦
lonelyhacker 2017-11-09
  • 打赏
  • 举报
回复

//假设有10个edit,要求edit的ID必须是连续的或者有规律可找的。

.h:
CEdit	m_edit[10];
afx_msg void OnKillfocusEdit(UINT nId);

.cpp
for(int i=0;i<10;i++)	
    DDX_Control(pDX, IDC_EDIT1+i, m_edit[i]);

ON_CONTROL_RANGE(EN_KILLFOCUS,IDC_EDIT1,IDC_EDIT10,OnKillfocusEdit)

void C111Dlg::OnKillfocusEdit(UINT nId)
{
       CString str;
        nId = nId - IDC_EDIT1;
        m_edit[nId].GetWindowText(str);
} 

zgl7903 2017-11-09
  • 打赏
  • 举报
回复
可以重载EDIT父窗口的 OnCommand 处理 BOOL CDlg5Dlg::OnCommand(WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class UINT uNotify = HIWORD(wParam); UINT uID = LOWORD(wParam); if(uNotify == EN_UPDATE) { switch(uID) …… } return CDialog::OnCommand(wParam, lParam); }
chen_JADE 2017-11-09
  • 打赏
  • 举报
回复
1. 需要派生一个EDIT类,然后写一个事件处理函数,并带有区分switch(ID)的实参 2. 用这个派生类创建3个EDIT对象 3. 在每个控件的触发事件里面调用派生类的事件函数,并将ID(比如0,1,2)顺序传递过去
向立天 2017-11-09
  • 打赏
  • 举报
回复
可以把N个事件关联到一个消息函数上,然后通过控件ID区分

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧