How do I rename the MFC ribbon panel?我有一个相关的问题。我在资源中的功能区原始字幕是语言A.我翻译了语言B中的所有内容,包括面板'名称(使用与上述主题中提供的方法类似的方法)。但是,当我缩小窗口以使某些(或所有)面板坍塌时,它们的名称会回到语言A。当我加宽窗口时,面板和面板会缩小。名称再次翻译成语言B.仍然没有找到解决方案。有人有个主意吗? :/ EDIT:我们使用一个可以使用标志的翻译类,因此,根据语言标记,它会转换字符串,然后应用于类别,按钮等。我创建了自己的面板类,它来自CMFCRibbonPanel。我添加了这个方法:
void CRibbonPanel::setName(CString name)
{
m_strName = name;
}
然后我循环查找并编辑每个面板的名称:
(CRibbonPanel*)thePanel->setName(theNewName);
它工作正常但是当面板折叠时,它们的标题会恢复为默认语言。
答案 0 :(得分:2)
折叠的面板标题存储在“默认面板按钮”中。像这样扩展访问者类:
class CRibbonPanel : public CMFCRibbonPanel
{
public:
void SetName(CString& name )
{ m_strName = name; };
CMFCRibbonDefaultPanelButton & GetDefBtn()
{ return m_btnDefault; }
};
然后像这样使用:
void ChangeText(CMFCRibbonPanel * pPanel, CString & newText)
{
auto pMyPanel = (CRibbonPanel *)(pPanel);
auto & defBtn = pMyPanel->GetDefBtn();
defBtn.SetText(newText);
}
MFC功能区界面不是一个完美的抽象。幸运的是,Microsoft分发了功能区实现的源代码。在我的机器上,面板代码位于:
C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ atlmfc \ src \ mfc \ afxribbonpanel.cpp