例如 在一个对话框上面,放有IDC_COMBO1,IDC_COMBO2,IDC_COMBO3 三个控件,
通过
ON_CBN_SETFOCUS(IDC_COMBO1, OnSetfocusCombo)
ON_CBN_SETFOCUS(IDC_COMBO2, OnSetfocusCombo)
ON_CBN_SETFOCUS(IDC_COMBO3, OnSetfocusCombo)
把三个控件的ON_CBN_SETFOCUS消息映射到同一个函数OnSetfocusCombo(),
当任意一个控件发除ON_CBN_SETFOCUS消息而进入到函数OnSetfocusCombo()时,
有没有什么方法可以知道是哪个控件发出的消息? 请各位帮帮忙

解决方案 »

  1.   

    用GetFocus获得当前有焦点的控件
      

  2.   

    这个好办。你别用这种方式。用ON_CONTROL_RANGE来群响应就行了。
    http://blog.csdn.net/jack100200/archive/2007/12/26/1968609.aspx
    这篇文章上说的挺清楚的。你参考一下,肯定能解决。
      

  3.   

    应该有的,在msdn里找一下,这个东西太繁杂了,不可能每个都记住的。
      

  4.   

    我想的就像
    追逐牛牛们的背影 说的那样另外 我用CEDIT 的 ON_EN_SETFOCUS去做这个处理(像快乐鹦鹉说的那个文章的上的那样用)为什么总说ON_EN_SETFOCUS没有定义?
      

  5.   

    响应WM_COMMAND消息,HIWORD(wParam)==CBN_SETFOCUS时,LOWORD(wParam)是控件ID,lParam是控件句柄。
      

  6.   

    ON_CONTROL_RANGE(ON_EN_CHANGE, IDC_EDIT1,IDC_EDIT3, OnChangeEdit1)
    这样写的 是不是搞错了?
      

  7.   

    WM_COMMAND消息 在对话框上是不是没有呀,没有找到呀?
      

  8.   

    #define ON_CONTROL_RANGE(wNotifyCode, id, idLast, memberFxn)
    你写的没有错啊。另外 我用CEDIT 的 ON_EN_SETFOCUS去做这个处理(像快乐鹦鹉说的那个文章的上的那样用)为什么总说ON_EN_SETFOCUS没有定义?
    ===ON_EN_SETFOCUS不是消息名称,应该用EN_SETFOCUS
      

  9.   

    ON_EN_CHANGE也不对,应该用EN_CHANGE,这才是消息号。ON_EN_CHANGE是响应这个消息的消息函数名称。
      

  10.   

    另外,如果控件的ID号不是连续的,把这些控件ID都放在一个数组里,然后再做这样的处理行不行,有没有其他的函数可用?
      

  11.   

    你可以直接添加消息宏,或者重载OnCommand函数。
      

  12.   

    加入如下代码,就可以知道发出消息的控件的ID号,通过ID也可以得到控件的其它信息
    CString strID;strID.Format(_T("%d"), GetFocus()->GetDlgCtrlID());AfxMessageBox(strID);