2014-09-04 60 views
1

How do I rename the MFC ribbon panel?我有一个相关的问题。我在功能区中的功能区原始标题以语言A表示。我翻译了语言B中的所有内容,包括面板的名称(使用与上述主题中提供的方法类似的方法)。但是,当我缩小窗口以便一些(或全部)面板折叠时,它们的名称将返回到语言A.当我扩大窗口时,面板的名称会再次翻译成语言B.还没有找到解决方案。任何人有想法? :/编辑:我们使用与标志一起工作的翻译器类,所以根据语言标志,它翻译字符串然后应用于类别,按钮等。我制作了自己的面板类,它源自CMFCRibbonPanel。我加入这个方法:MFC功能区面板名称问题

void CRibbonPanel::setName(CString name) 
{ 
    m_strName = name; 
} 

然后我做一个循环来查找和编辑每一个小组的名字:

(CRibbonPanel*)thePanel->setName(theNewName); 

它工作正常,但是当面板被折叠,其标题返回到默认语言。

+0

什么样的tranlsation的你使用? Satellite DLLs? – xMRi 2014-09-04 21:05:04

+0

你可以发布你用来重命名面板的代码吗? – thomiel 2014-09-05 00:48:44

+0

不,我们没有使用卫星DLL,我们使用一个与标记一起工作的翻译器类,所以,根据语言标志,它翻译字符串,然后应用到类别,按钮等。我制作了我自己的面板类派生自CMFCRibbonPanel。我加入这个方法: '无效CRibbonPanel ::的setName(CString的名称)'' {'' = m_strName名;'' }' 它工作正常,但是当面板倒塌,其标题回到默认语言。 – Stoyanov 2014-09-08 07:08:03

回答

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的Ribbon界面是不是一个完美的抽象。幸运的是,微软分发了功能区实现的源代码。

C:在我的机器,面板的代码中发现的\程序文件(x86)\微软的Visual Studio 12.0 \ VC \ atlmfc的\ src \ MFC \ afxribbonpanel.cpp

+0

谢谢!我不再在那里工作了,但我只是给他们发送了链接。看起来他们已经以这种或那种方式解决了问题:) – Stoyanov 2015-03-06 19:09:00