Нужно сделать сабж (как, например в Outlook 2007). Работаю в VS2010 под Win XP. Беру стандартный визардовый MDI проект. Тулбар создается стандартно:
if ( !m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
TRACE0("Не удалось создать панель инструментов\n");
return -1; // не удалось создать
}
Дальше мои попытки добавить стрелку для выпадающего меню и/или подпись к кнопке. Как я только не извращался...
(1)
// расширенный стиль почему-то не устанавливается
m_wndToolBar.ModifyStyleEx( 0, TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_DRAWDDARROWS );
int i = m_wndToolBar.CommandToIndex( ID_TEST );
m_wndToolBar.SetButtonStyle( i, BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT | BTNS_DROPDOWN );
// текст даже в качестве тултипа не устанавливается, не говоря уже о подписи
m_wndToolBar.SetButtonText( i, _T( "Test" ) );
// кнопка без изменений
В VS2005 для CToolBar этот способ работал, но там расширенный стиль ставился так:
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle( TBSTYLE_EX_MIXEDBUTTONS );
Теперь же контрола тулбара вроде как нет.
(2)
// сделать хотя бы подпись...
int i = m_wndToolBar.CommandToIndex( ID_TEST );
CMFCToolBarButton* b = m_wndToolBar.GetButton(i);
b->m_strText = _T( "TEST" );
b->m_bText = true;
b->m_bImage = false;
// кнопка без изменений
(3)
// сделать хотя бы подпись...
int i = m_wndToolBar.CommandToIndex( ID_TEST );
CMFCToolBarButton* b = new CMFCToolBarButton( ID_TEST, ID_TEST - 1 , _T( "test" ), 1 );
b->m_strText = _T( "TEST" );
b->m_bText = true;
b->m_bImage = false;
b->Show(true);
m_wndToolBar.ReplaceButton( ID_TEST, *b );
// кнопка без изменений
(4)
// сделать хотя бы стрелку...
CMFCToolBarMenuButton* b = new CMFCToolBarMenuButton( ID_TEST, 0, ID_TEST, _T( "test" ) );
m_wndToolBar.ReplaceButton( ID_TEST, *b );
// кнопка без изменений
P.S. Подскажите, есть ли нормальная русская книжка по MFC в VS2010?