Сделал так:
ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, OnToolbarReset)
afx_msg LRESULT CMainFrm::OnToolbarReset(WPARAM wp, LPARAM)
{
UINT id = (UINT)wp;
if( id == IDR_MAINFRAME )
{
CMFCToolBarMenuButton b( IDB_TEST, this->GetSystemMenu(0)->GetSafeHmenu(),
-1, _T( "Подпись к кнопке" ) );
b.m_bText = true;
m_wndToolBar.ReplaceButton( IDB_TEST, b );
}
return 0;
}
Нужно было а) поменять кнопку в этом обработчике; б) задать реальный хэндл на меню, иначе стрелка не появится; в) после компиляции сбросить меню через его настройки, т.к. из реестра грузится все равно старое меню.
При этом CMFCToolBarButton::m_bWrapText не похоже, что работает (а жаль), как и CMFCToolBar::SetButtontext. Также открыт вопрос про книжку/статьи по MFC в VS2010.