0

MFCリボンバーには、「リボンを最小化」というラベルの付いたメニュー項目があります。選択すると、各カテゴリのヘッダーのみが表示され、ヘッダーをクリックするとリボンがポップアップ表示されます。プログラムでリボンをこの状態にしたいのですが。残念ながら、私が見つけることができる唯一の方法はToggleMimimizeState()[sic]であり、現在の状態に応じて、この状態にするか、または取り出すことができます。

MFCソースコードを見ると、メニューコマンドが機能する方法は次のコードを使用しています。

case idMinimize:
    if (m_pActiveCategory != NULL)
    {
        ASSERT_VALID(m_pActiveCategory);
        m_pActiveCategory->ShowElements(FALSE);
        RedrawWindow();
    }

m_pActiveCategoryCMFCRibbonBarメソッドを介してクラスの外部から取得できますGetActiveCategory()が、残念ながらカテゴリのShowElements()メソッドはprotectedであり、パブリックメソッドで同じ効果を達成する方法がわかりません。

リボンが現在最小化されているかどうかを判断する明確な方法もありません。

足りないものはありますか、それとも現在の状態を推測するだけですか?

4

4 に答える 4

3

CMFCRibbonBarCMFCRibbonCategoryから2つの新しいクラスを派生させる

class MyCMFCRibbonCategory: public CMFCRibbonCategory
{
public:
    void force_ShowElements(BOOL todo)
    {
        ShowElements(todo);
    }
};

class MyRibbonBar: public CMFCRibbonBar
{
public:
    BOOL is_minimized()
    {
        return m_dwHideFlags == AFX_RIBBONBAR_HIDE_ELEMENTS;
    }

    void minimize_me(BOOL show_minimized)
    {
        MyCMFCRibbonCategory* cc = (MyCMFCRibbonCategory*)GetActiveCategory();
        if (cc != NULL)
        {
            cc->force_ShowElements(!show_minimized);
            RedrawWindow();
        }
    }
};

次に、CMainframeをから変更します

CMFCRibbonBar   m_wndRibbonBar;

MyRibbonBar     m_wndRibbonBar;

これで、コードで新しい2つのメンバーを使用できます。

BOOL MyRibbonBar::is_minimized()
void MyRibbonBar::minimize_me(BOOL show_minimized)

基本的な例:

void CMainFrame::OnButton2()
{
    if( m_wndRibbonBar.is_minimized() )
        m_wndRibbonBar.minimize_me(FALSE);
    else
        m_wndRibbonBar.minimize_me(TRUE);
}

それがお役に立てば幸いです。

于 2012-08-07T21:17:07.490 に答える
1

上記の組み合わせは私のために働いた。つまり、メインメニューの追加機能のタブ付きセットとしてリボンを使用したかったのです。ただし、リボンを最大化したままにする機能は必要ありませんでした。ユーザーにクリックしてもらい、いくつかのアクションを確認してから、消えてもらいたかっただけです。

つまり、リボンがドッキングしたり、最大化されたままになるのを防ぎます。あなたがそれを呼びたいものは何でも。タブをクリックし、リボンのアイコンをクリックして消えます。

指示:

  1. CMFCRibbonBarから継承して、独自のCMyRibbonクラスを派生させました。(クラスウィザードを使用してMFCクラスを作成します)
  2. 新しいCMyRibbonクラス(ClassWizard)でWM_SIZEのイベントハンドラーを作成します

void CMyRibbon::OnSize(UINT nType, int cx, int cy)
{
    CMFCRibbonBar::OnSize(nType, cx, cy);

    if (!(GetHideFlags() & AFX_RIBBONBAR_HIDE_ELEMENTS))
        ToggleMimimizeState();
}
  1. CMainFrm.hに、次の変更を追加します 。CMyRibbon m_wndRibbonBar;
于 2015-08-12T19:12:09.480 に答える
0

m_wndRibbonBar.ToggleMimimizeState();を使用します。

于 2014-06-19T07:36:07.607 に答える
-1

(m_wndRibbonBar.GetHideFlags()&AFX_RIBBONBAR_HIDE_ELEMENTS)の値を確認するだけです。

于 2014-11-06T16:01:31.150 に答える