システムwiki

MFCApplicationでリボンリソースを動的に切り替える

steveh0 受付中 最終更新日:2021-12-18 04:39

私のMFCアプリのユーザーはリボンをクリックできる必要があります
別のリボンUIに切り替えるためのボタン(たとえば、別のもの)
言語).私のプロジェクトにidr_ribbonとidr_ribbon1があります.NS
「スイッチ」ボタンには、次のイベントハンドラがあります.

VIDCMAINFRAME :: ONSWITCHRIBBON()

{

//TODO:
コマンドハンドラコードを追加ここに追加

M_Wndribbonbar.RemoveAllCategories();

M_WndribBonbar.RemoveAllFromTabs();

M_Wndribbonbar.ShowPane(0、
0,0);

検証(M_WndribBonbar.loadFromResource(IDR_RIBBON1)).
M_Wndribbonbar.ShowPane(1,0,0).

M_WndribBonbar.RecalClayout();

RecalClayout();

RedrawWindow();

}

書かれているように、それは以下のアクセス違反を引き起こします
以下のRedrawElement機能でのMFCリボンパネルコード:

void cmfcribbonPanel :: MouseButtonup(CPOINT POINT)

{

assert_valid(これ);

m_bmouseisdown.
= false;

もしの場合
(m_phightighted!= null)

{

assert_valid(m_phightlighted);

h
hwndParent= getParentWnd()->getSafehwnd();
cmfcribbonBaseElement*
Phighlighted= m_phighlighted.
M_phighthighted->OnlButtonUp(Point);
もしの場合
(:: isWindow(hwndparent)&&phighlighted->m_bispressed)

{

Phighlighted->M_Bispressed
= false;

RedrawElement(Phighlighted); アクセス違反

フォロー翼2行が呼び出し前に追加された場合
私のコードのloadResource(idr_ribbon1):

RemovePanefromDockManager(&M_Wndribbonbar、
true、true、false、null);

検証(M_Wndribbonbar.create(これ)).

それから
アクセス違反なしで実行されます.しかし、私は他のすべてのバーを動かす必要があります
元のドッキングペインレイアウトを得るためのアプリ(キャプションバーのような).ある
この周りの方法は?

最後に、もう一つのバグがあります
新しいリボンで印刷プレビューを引き起こすCMFCリボンコードで
失敗する(idr_ribbon1).それはどのように避けることができますか?

返信リスト(回答:1)

1 #
Dumba

こんにちは、申し訳ありませんが、間違ったフォーラム.

それは可能ですが、あなたがWindows用のエンドユーザーの顧客フォーラムでここにその答えを取得することはできません.

MSDNフォーラム(Microsoft.com)

いくつかのMSDNはQ&Aに参加してきました.また、ヘルプを見つける可能性が高くなります.

すべての質問-Microsoft Q&A.