我知道从 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 的派生类,它是启用窗格中的按钮所必需的,但我没有尝试过禁用它们。
好的,我发现唯一的解决方案不是使用禁用按钮的标准方法,而是将条件放在每个 on 命令更新函数中并使用 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' 控制是否在没有处理程序时禁用。