c++ - MFC 功能区面板名称问题

标签 c++ mfc panel ribbon

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

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

最佳答案

折叠面板标题存储在“默认面板按钮”中。像这样扩展访问器类:

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

关于c++ - MFC 功能区面板名称问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663159/

相关文章:

c++ - Qt4:使全屏窗口无法绕过(锁定屏幕)?

c++ - 类型*元素容器的qt排序

c++ - g++ 有问题吗?还有 clang++ 吗?带有 -O0 和 -O1 选项的 g++ 编译代码的行为不同对于带有 -O0 和 -O2 的 clang++ 也是如此

c++ - 如何知道 std::string/Cstring 中的值是否为数字

c++ - 应用程序连接到数据库

c++ - MFC如何将两个对话框合并为一个对话框?

css - Sencha Touch 2 圆形面板 : CSS newb

c# - 如何在 Panel 上绘制以使其不闪烁?

c++ - 遍历 vector 的所有成员

java - 使用容器在 Java Swing 中重新绘制