C++ 启用\禁用嵌入窗格中的CMFCToolBar按钮

C++ 启用\禁用嵌入窗格中的CMFCToolBar按钮,c++,button,mfc,pane,cmfctoolbar,C++,Button,Mfc,Pane,Cmfctoolbar,我知道从CMFCToolBar启用/禁用按钮的最佳方法是使用 int b_id = m_ToolBar.CommandToIndex(ID_BUTTON); m_ToolBar.SetButtonStyle(b_id,TBBS_DISABLED); 但是,当工具栏嵌入CDockable窗格时,这似乎不起作用。我有一个CMFCToolBar的派生类,该类是启用窗格中按钮所必需的,但我尝试过的任何操作都不会禁用它们。好的,我发现唯一的解决方案不是使用禁用按钮的标准方法,而是在每个窗格中

我知道从CMFCToolBar启用/禁用按钮的最佳方法是使用

  int b_id = m_ToolBar.CommandToIndex(ID_BUTTON);
    m_ToolBar.SetButtonStyle(b_id,TBBS_DISABLED);

但是,当工具栏嵌入CDockable窗格时,这似乎不起作用。我有一个CMFCToolBar的派生类,该类是启用窗格中按钮所必需的,但我尝试过的任何操作都不会禁用它们。

好的,我发现唯一的解决方案不是使用禁用按钮的标准方法,而是在每个窗格中设置条件打开命令更新功能,并使用pCmdUI->Enable(FALSE);与您对菜单所做的操作没有太大区别。

我知道这个主题已经有几年了,但我发现另一种方法是继承CMFCToolBar并覆盖以下内容:

  ON_MESSAGE(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)      

      afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM wParam, LPARAM lParam) {
        return __super::OnIdleUpdateCmdUI(0, lParam);
      }
然后使用按钮样式TBBS_DISABLED启用/禁用按钮,然后调用AdjustLayout()进行更新。这样,您就不需要为每个按钮都使用更新处理程序

PS.“wparam”控制在没有处理程序时是否禁用