Изменение изображения кнопки меню в CMFCToolbar - PullRequest
10 голосов
/ 10 марта 2009

У меня есть кнопка меню внутри CMFCToolbar, и я хотел бы заменять растровое изображение кнопки каждый раз, когда в меню выбирается другая запись, так как у каждой записи есть свой значок.

Мне удалось изменить значок с помощью CMFCToolBarMenuButton::SetImage, но он также меняет значок в пункте меню. Жаль.

альтернативный текст http://www.freeimagehosting.net/uploads/137269b0f2.jpg альтернативный текст http://www.freeimagehosting.net/uploads/879d03843a.jpg

Вот пример кода:

if ( (pToolbar != NULL) && (idBase != 0) )
{
    int ixButtonToReplace                   = pToolbar->CommandToIndex(idBase);
    CMFCToolBarMenuButton* pBtnToReplace    = dynamic_cast<CMFCToolBarMenuButton*>
                                                (pToolbar->GetButton(ixButtonToReplace));
    if ( pBtnToReplace )
    {
        const CObList& listCommands = pBtnToReplace->GetCommands();
        POSITION pos                = listCommands.GetHeadPosition();
        while ( pos != NULL )
        {
            CMFCToolBarMenuButton* pItem = (CMFCToolBarMenuButton*) listCommands.GetNext(pos);
            if ( pItem && (pItem->m_nID == idButtonToReplaceWith) )
            {
                pBtnToReplace->SetImage(pItem->GetImage());
            }
        }
    }
}

Есть идеи? Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Работает из коробки. Вам нужно только позвонить CMFCToolBar::AddToolBarForImageCollection, чтобы MFC могла знать, какие изображения использовать.

1 голос
/ 31 марта 2011

Не уверены, что вы подразумеваете под кнопкой меню, тоже изменилось?

Если другая кнопка изменяется при одном вызове setImage с очевидным указанием на то, что они совместно используют некоторый идентификатор ресурса, единственное решение состоит в том, чтобы гарантировать, что они имеют разные идентификаторы (что потребовало бы, чтобы оба ресурса обрабатывались отдельно) , Но прошло много времени с тех пор, как я запутался в файлах ресурсов MFC, чтобы подтвердить это.

...