MFC 功能区面板名称问题
Posted
技术标签:
【中文标题】MFC 功能区面板名称问题【英文标题】:MFC Ribbon Panel name issue 【发布时间】:2014-09-04 10:29:51 【问题描述】:How do I rename the MFC ribbon panel?我有一个相关的问题。我的功能区在资源中的原始标题使用语言 A。我用语言 B 翻译所有内容,包括面板的名称(使用类似于上述主题中提供的方法)。但是当我缩小窗口以使部分(或全部)面板折叠时,它们的名称会返回到语言 A。当我扩大窗口时,面板的名称会再次转换为语言 B。还没有找到解决办法。有人有想法吗? :/ 编辑:我们使用一个与标志一起使用的翻译器类,因此,根据语言标志,它翻译字符串,然后将其应用于类别、按钮等。我制作了自己的面板类,它派生自 CMFCRibbonPanel。我添加了这个方法:
void CRibbonPanel::setName(CString name)
m_strName = name;
然后我循环查找和编辑每个面板的名称:
(CRibbonPanel*)thePanel->setName(theNewName);
它工作正常,但是当面板折叠时,它们的标题会恢复为默认语言。
【问题讨论】:
您使用哪种翻译方式?附属 DLL? 你能贴出你用来重命名面板的代码吗? 不,我们没有使用附属 DLL,我们使用了一个与标志一起工作的翻译器类,因此,根据语言标志,它翻译字符串,然后应用到类别、按钮等。我制作了自己的面板类,它派生自 CMFCRibbonPanel。我添加了这个方法:void CRibbonPanel::setName(CString name)
m_strName = name;
它工作正常,但是当面板折叠时,它们的标题会回到默认语言。
呃,markdown 不能正常工作。我不能把代码放在不同的行:/
那么您为 CMFCRibbonPanel 做了自己的 Wrapper?但是从您的代码中不清楚您的 m_strName 如何与基类交互。最好将整个课程发布到您原始问题的编辑中,以便我拍照。
【参考方案1】:
折叠的面板标题存储在“默认面板按钮”中。像这样扩展访问器类:
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
【讨论】:
谢谢!我不再在那里工作,但我只是给他们发了链接。看来他们已经以这种或另一种方式解决了问题:)以上是关于MFC 功能区面板名称问题的主要内容,如果未能解决你的问题,请参考以下文章