Решение оказалось очень простым, просто вызовите функцию OnClick
кнопки CMFCToolBarComboBoxButton
из соответствующей ON_COMMAND
.
// ... message map
ON_COMMAND(ID_BUTTON, OnToolbarMenuButtonClicked)
// ...
void MyWnd::OnToolbarMenuButtonClicked()
{
const int index = m_toolbar.CommandToIndex(ID_BUTTON);
auto button = (CMFCToolBarComboBoxButton*)m_toolbar.GetButton(index);
button->OnClick(NULL, TRUE);
}
Это поведение незадокументировано и, вопреки здравому смыслу, не создает бесконечного рекурсивного вызова.Кажется, что «основная» кнопка все еще контролируется CMFCToolBarButton
, в то время как только «кнопка со стрелкой» управляется CMFCToolBarComboBoxButton
.
PS: очевидно, и выходит за рамки вопросаOnToolbarMenuButtonClicked
может использоваться для совершенно других целей, таких как действие по умолчанию, в то время как подменю содержит другие менее частые параметры.