CMFCToolBar и кнопки с подписями и стрелками
От: Kernel0  
Дата: 10.02.14 06:30
Оценка:
Нужно сделать сабж (как, например в 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?
mfc cmfctoolbar cmfctoolbarbutton
Re: CMFCToolBar и кнопки с подписями и стрелками
От: Kernel0  
Дата: 11.02.14 08:22
Оценка:
Сделал так:
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.
Re: CMFCToolBar и кнопки с подписями и стрелками
От: Serpuh фотомер.рф
Дата: 11.02.14 08:43
Оценка:
Поищи примеры по "Visual C++ 2008 Feature Pack samples".
Книжки скорее всего нет, вернее есть, но по сути перепечатка старых книг.
Re[2]: CMFCToolBar и кнопки с подписями и стрелками
От: Hawk Россия  
Дата: 11.02.14 14:31
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>Сделал так:

Может, проще вызвать метод EnableTextLabels()?
Re[3]: CMFCToolBar и кнопки с подписями и стрелками
От: Kernel0  
Дата: 12.02.14 05:02
Оценка:
Здравствуйте, Hawk, Вы писали:

H>Здравствуйте, Kernel0, Вы писали:


K>>Сделал так:

H>Может, проще вызвать метод EnableTextLabels()?

Это делает подписи под всеми кнопками, а мне надо было под (а лучше рядом с) некоторыми.
Re: CMFCToolBar и кнопки с подписями и стрелками
От: AlexGin Беларусь  
Дата: 12.02.14 13:52
Оценка:
Здравствуйте, Kernel0, Вы писали:

K>P.S. Подскажите, есть ли нормальная русская книжка по MFC в VS2010?


Книжек не видел (их, вероятно, нет) но пользуюсь ссылочками:
1) http://www.codeguru.com/cpp/cpp/cpp_mfc/tutorials/article.php/c14929/MFC-Feature-Pack-An-Introduction.htm
2) http://www.codeproject.com/Articles/217588/Porting-a-legacy-MFC-app-to-MFC-Feature-Pack
ну и конечно же online MSDN...

P.S. Насчет "нормальных русских книжек по MFC" — давно уже не встречал
Re[2]: CMFCToolBar и кнопки с подписями и стрелками
От: Kernel0  
Дата: 13.02.14 07:21
Оценка:
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.