Изменение изображения кнопки меню в CMFCToolbar

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

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

alt text http://www.freeimagehosting.net/uploads/137269b0f2.jpg alt text 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());
            }
        }
    }
}

Любые идеи? Спасибо.

Ответ 1

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

Ответ 2

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

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