以前的一个MDI程序,将许多菜单ID函数单独对应一个命令,状态更新函数也是。

BEGIN_MESSAGE_MAP
   ON_COMMAND(IDC_TEST1,OnTest1)
    ON_COMMAND(IDC_TEST3,OnTest3)    ......
   ON_UPDATE_COMMAND_UI(IDC_TEST1,OnTest1UpdateUI)
   ON_UPDATE_COMMAND_UI(IDC_TEST3,OnTest3UpdateUI)
 
END_MESSAGE_MAP void CMainFrame::OnTest1()
  {
      //......   }
 void CMainFrame::OnTest3()
  {
      //......   } void CMainFrame::OnTest1UpdateUI(*pCmdUI)
 
 {}void CMainFrame::OnTest3UpdateUI(*pCmdUI)
 
 {
//.......
    
}
 我想把函数精简,多个ID映射到一个函数处理,状态更新函数也是。
 但是不能使用ON_COMMAND_RANGE和ON_UPDATE_COMMAND_UI_RANGE 因为以前的ID号不一定是连续的。如何实现????谢谢

解决方案 »

  1.   

    void CMainFrame::OnMxCommandEx(WPARAM nCtrlId, LPARAM)
    {
        switch (nCtrlId)
        {
        case CTRLID_TITLEBAR_BUTTON_SETUP:
            {
                CDlgSetup dlg;
                if (dlg.DoModal() == IDOK)
                {
                    LoadLanguage();
                }
            }
            break;    case CTRLID_TITLEBAR_BUTTON_SYSLOG:
            {
                CDlgSysLog dlg;
                dlg.DoModal();
            }
            break;
       }
    }
    楼主说的是不是这个?????
      

  2.   

    ID如果是连续的,那么就很容易了,用COMMAND_RANGE即使是不连续的,也可以做到映射到同一组函数  ON_COMMAND(IDC_TEST1,OnCommonFun)
      ON_COMMAND(IDC_TEST2,OnCommonFun)
      ON_COMMAND(IDC_TEST3,OnCommonFun)
      ON_COMMAND(IDC_TEST4,OnCommonFun)
      ON_COMMAND(IDC_TEST5,OnCommonFun)  ......  ON_UPDATE_COMMAND_UI(IDC_TEST1,OnCommonUpdateUI)
      ON_UPDATE_COMMAND_UI(IDC_TEST2,OnCommonUpdateUI)
      ON_UPDATE_COMMAND_UI(IDC_TEST3,OnCommonUpdateUI)
      ON_UPDATE_COMMAND_UI(IDC_TEST4,OnCommonUpdateUI)
      ON_UPDATE_COMMAND_UI(IDC_TEST5,OnCommonUpdateUI)
      

  3.   

    每个ID和每个响应命令如何对应起来????
    ---------
    你不是说多个ID共用一个命令响应吗
      

  4.   

    N个ID本来是对应N个函数体的。现在时N个Id对应一个函数体,在函数里面分别对ID响应。
      

  5.   

    WindowFromPoint获取当前鼠标的控件,在通过GetDlgCtrlId获得ID。