10

内にメニューボタンがあり、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());
            }
        }
    }
}

何か案は?ありがとうございました。

4

2 に答える 2

2

すぐに使用できます。CMFCToolBar::AddToolBarForImageCollection必要なのは、MFC が使用するイメージを認識できるように呼び出すことだけです。

于 2011-05-30T11:50:23.660 に答える
1

メニュー ボタンも変更されたという意味がわからない場合は、

単一の setImage 呼び出しで別のボタンが変更され、何らかのリソース ID を共有していることが明らかな場合、唯一の解決策は、それらが異なる ID を持つようにすることです (これには、両方のリソースが別々に処理されることを確認する必要があります)。しかし、これを確認するために MFC リソース ファイルをいじってから長い時間が経ちました。

于 2011-03-31T14:25:04.120 に答える