2

ある言語から別の言語への動的切り替えをサポートする多言語アプリケーションをプログラミングしています。クラス CMFCRibbonPanel に GetName 関数があるので、SetName 関数もあるとよいと思います。しかし、残念ながら、私は目的の機能を見つけることができません。リボン パネルの名前を動的に変更するにはどうすればよいですか? どうもありがとうございました。

4

5 に答える 5

3

パネル名は保護されています。

CMFCRibbon から独自のクラスを派生させ、"SetName" メソッドを追加できます。

class MyRibbonPanel : public CMFCRibbonPanel
{
public:
    MyRibbonPanel(LPCTSTR lpszName = NULL, HICON hIcon = NULL ) : CMFCRibbonPanel(lpszName, hIcon) {};
    void SetName(CString& name ) { m_strName = name; };
};

例 (VS2010 でダミーの SDI アプリケーションを作成した後)

CMFCRibbonCategory* pCategory = m_wndRibbonBar.AddCategory(_T("&Legume"),
    IDR_PROPERTIES,
    IDB_PROPERTIES_HC );


MyRibbonPanel* pMyPanel = (MyRibbonPanel*)pCategory->AddPanel(_T("Patate"), m_PanelImages.ExtractIcon(1));
pMyPanel->SetKeys(_T("zc"));
pMyPanel->SetCenterColumnVert();
pMyPanel->SetJustifyColumns();

CString s(_T("sdcasdc"));
pMyPanel->SetName(s);
于 2011-02-25T18:14:37.393 に答える
2

VS リボン UI を介してリボンを作成し、手動で作成する必要がない場合にも、他の人に役立つ可能性があります。

前の回答から取り組んでいます。

パネルには ID がないため、それらを選択してポインターを作成することもできません。ただし、パネルに ID を持つ要素が含まれている場合は、これらを使用してパネルへのポインターを作成し、手動で作成する代わりに名前を変更できます。

たとえば、パネルに ID_TEST_COMBO というコンボがあります。

CMFCRibbonComboBox* m_RibbonTestCombo;
MyRibbonPanel*      m_ribbonPanel;
m_RibbonTestCombo= DYNAMIC_DOWNCAST(CMFCRibbonComboBox,m_wndRibbonBar.FindByID(ID_TEST_COMBO));
m_ribbonPanel = DYNAMIC_DOWNCAST(MyRibbonPanel, m_RibbonSSSRules->GetParentPanel());
CString s(_T("sdcasdc"));
m_ribbonPanel->SetName(s);

これにより、パネルを手動で作成しなくてもテキストを変更できます

于 2014-08-07T10:26:02.830 に答える
0

おそらく削除して再度追加する必要があります。これが、他の MFC リボン関数のしくみです。

于 2011-02-25T17:04:00.413 に答える
0

SetWindowText 関数を試すことができます。また、テキストの描画をオーバーライドして、そこに独自のテキストを追加することもできます。

お役に立てれば。

于 2011-02-25T13:07:03.990 に答える