在一个对话框中有很多控件(多于50个),它们分成N个组,用一变量(m_nSel)保存最新获得焦点的控件所属的组号。
例如:有30个控件,分成5组,当第一组中的任何一个组件获得焦点时,m_nSel = 1由于控件数过多,不想为每一个控件处理SetFocus函数各位请帮帮我,现在急需解决。

解决方案 »

  1.   

    有个处理消息范围(RANGE)的,把成组的控件ID设成连续的就可以了
      

  2.   

    把成组的控件ID设成连续的,然后
    在头文件中
    begin_message_map()
      //手工加入
      ON_COMMAND_RANGE(ID_FIRST,ID_END,SetFocus);
      //
    end_message_map()
      

  3.   

    问题解决了,我得载了OnCmdMsg函数。各位帮我看看,这种方法好不好。
    OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
    {
       // TODO: Add your specialized code here and/or call the base class
        if ((EN_SETFOCUS == nCode) ||    //edit box
            (CBN_SETFOCUS == nCode) ||   //combo box
            (0x004efff9 == nCode))       //data time picker 这里有点问题
        {
             SelectItem(nID);
        }

        return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
    }
    这里有个问题,时间控件焦点我不知道是哪个宏,系统用的是WM_NOTIFY消息中的NM_SETFOCUS,
    0x004efff9 这个值我是通过查看Call Stack窗口中找到的,不知这个值是不是定值?