MFC功能区面板名称问题

时间:2014-09-04 10:29:52

标签: c++ mfc panel ribbon

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);  

它工作正常但是当面板折叠时,它们的标题会恢复为默认语言。

1 个答案:

答案 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