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 回答
0

结合https://stackoverflow.com/a/5120994/6648895https://stackoverflow.com/a/25180098/6648895 最终在 VS 2013 中为我工作:

MyRibbonPanel* m_ribbonPanel;
m_ribbonPanel = static_cast<MyRibbonPanel*>(m_wndRibbonBar.GetCategory(1)->GetPanel(1));
CString s(_T("sdcasdc"));
m_ribbonPanel->SetName(s);
于 2019-01-16T11:52:24.310 回答