关于mfc中ribbon界面如何修改标题属性问题

asher-wong asher-wong     2022-10-06     707

关键词:

最近在工作中,遇到了需要将软件从中文转成英文的问题。通常来说,MFC界面上的控件均可以用SetWindowText来解决。但对于Ribbon,往往不怎么好使。也是从网上找了很多资料,最终总结如下。

先上效果图

中文版:

技术分享图片

英文版:

技术分享图片

如图中,我的界面包括了Ribbon界面中的三种控件,Panel,Button,Category。

当需要从代码去修改时,代码如下

//对于Category界面,修改方法为在MainFrm中的OnCreate生成界面的函数中,加入如下代码

CMFCRibbonCategory *pCategory = m_wndRibbonBar.GetCategory(1);
pCategory->SetName(_T("System"));

//对于Panel界面,修改方法如下,但要特别注意。Panel可能是设计时就没有考虑的问题,直接来说,是不能修改的,只能通过新建子类去进行强转

强转子类如下,新建MFC类,继续MFCRibbonPanel

.h文件为

#pragma once
#include "afxribbonpanel.h"

//继承RibbonPanel的子类
class MyRibbonPanel :public CMFCRibbonPanel
{
public:
MyRibbonPanel(void);
~MyRibbonPanel(void);
void SetPanelName(CString name);
};

.cpp文件为

#include "StdAfx.h"
#include "MyRibbonPanel.h"


MyRibbonPanel::MyRibbonPanel(void)
{
}


MyRibbonPanel::~MyRibbonPanel(void)
{
}

void MyRibbonPanel::SetPanelName(CString name)
{

  //在这里进行名字转行赋值
  m_strName=name;
}

 

然后,我们在MainFrm中,加载上述类然后,转换界面名字代码如下


CMFCRibbonPanel *pPanel1 = pCategory->GetPanel(0);
MyRibbonPanel* pMyPanel1 = (MyRibbonPanel*)pPanel1;//这里把父类的对象强制转换成子类对象,没有报错,说明可以转换
pMyPanel1->SetPanelName(_T("User Manage"));
CMFCRibbonPanel *pPanel2 = pCategory->GetPanel(1);
MyRibbonPanel* pMyPanel2 = (MyRibbonPanel*)pPanel2;//这里把父类的对象强制转换成子类对象,没有报错,说明可以转换
pMyPanel2->SetPanelName(_T("Motor Control Panel"));
CMFCRibbonPanel *pPanel3 = pCategory->GetPanel(2);
MyRibbonPanel* pMyPanel3 = (MyRibbonPanel*)pPanel3;//这里把父类的对象强制转换成子类对象,没有报错,说明可以转换
pMyPanel3->SetPanelName(_T("Robot Control Panel"));
CMFCRibbonPanel *pPanel4 = pCategory->GetPanel(3);
MyRibbonPanel* pMyPanel4 = (MyRibbonPanel*)pPanel4;//这里把父类的对象强制转换成子类对象,没有报错,说明可以转换
pMyPanel4->SetPanelName(_T("Equipment Info"));

//对于按钮,转换代码如下

 

CMFCRibbonButton* pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_LOGIN));
pRibbonBtn->SetText(_T("Login"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_LOGOFF));
pRibbonBtn->SetText(_T("Logout"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_MANAGER));
pRibbonBtn->SetText(_T("Edit"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_AXISMOTION));
pRibbonBtn->SetText(_T("Axis Control"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST1));
pRibbonBtn->SetText(_T("IO CARD 1"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST2));
pRibbonBtn->SetText(_T("IO CARD 2"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST3));
pRibbonBtn->SetText(_T("IO CARD 3"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST4));
pRibbonBtn->SetText(_T("IO CARD 4"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST5));
pRibbonBtn->SetText(_T("IO CARD 5"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST6));
pRibbonBtn->SetText(_T("IO CARD 6"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST7));
pRibbonBtn->SetText(_T("IO CARD 7"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_IOTEST8));
pRibbonBtn->SetText(_T("IO CARD 8"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_VELOCITY));
pRibbonBtn->SetText(_T("Axis Speed Setting"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_ETHERNET_CL));
pRibbonBtn->SetText(_T("Ethernet Client"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_RECORD));
pRibbonBtn->SetText(_T("View Record"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_CALITRAY));
pRibbonBtn->SetText(_T("Tray Calib"));

pRibbonBtn = DYNAMIC_DOWNCAST(CMFCRibbonButton, m_wndRibbonBar.FindByID(ID_TOOLS_BTN_TRAYPOINTS));
pRibbonBtn->SetText(_T("Tray Points"));

 

















































vs2010/mfc编程入门之五十三(ribbon界面开发:为ribbonbar添加控件)

 前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为RibbonBar添加Ribbon控件。       VS2010为Ribbon界面开发提供了RibbonDesigner,通过它我们可以为RibbonBar... 查看详情

(转载)vs2010/mfc编程入门之五十三(ribbon界面开发:为ribbonbar添加控件)

前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为RibbonBar添加Ribbon控件。       VS2010为Ribbon界面开发提供了RibbonDesigner,通过它我们可以为RibbonBar添加... 查看详情

vs2010环境下,mfc如何修改窗体名字?

...择后缀名为“.rc”的项目,右键“查看代码”,在打开的界面中搜索“caption”,更改名字即可。1.2.3.4.参考技术A方法1:   切换到资源视图--->右击窗体空白部分,选择属性-->修改Caption属性即可;方法2: SetWind... 查看详情

vs2010/mfc编程入门之五十二(ribbon界面开发:创建ribbon样式的应用程序框架)

...像的入门知识就讲完了。从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容。本文先来说说如何创建Ribbon样式的应用程序框架。      Ribbon界面就是微软从Office2007开始引入的一种为了使应用程序的功... 查看详情

(转载)vs2010/mfc编程入门之五十二(ribbon界面开发:创建ribbon样式的应用程序框架)

...像的入门知识就讲完了。从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容。本文先来说说如何创建Ribbon样式的应用程序框架。      Ribbon界面就是微软从Office2007开始引入的一种为了使应用程序的功... 查看详情

vs2008中怎样修改mfc界面字体大小

...就是这个不是通过控件写的字,而是通过语句编写插入主界面的,这样的情况怎么解决?追答嗯,比如是要改变编辑框中要显示的字的大小吗? 查看详情

建议使用MFC? [关闭]

...但是微软发布了VS2010的MFC10,并且它有最新的工具,比如Ribbon界面,所以应该将它用于简单的应用程序吗?【问题讨论】:这个问题已经被问过好几次了,在这里得到最好的回答:***.com/questions 查看详情

MFC:更新 Ribbon Bar 元素以反映操作进度

】MFC:更新RibbonBar元素以反映操作进度【英文标题】:MFC:UpdateRibbonBarelementstoreflectoperationprogress【发布时间】:2014-08-3000:37:34【问题描述】:我正在制作一个模拟工具,它在用户定义的迭代次数上运行模拟(在单独的线程中),... 查看详情

MFC 应用程序中的 C# 控件

...至更好的WPF)来改善应用程序的外观和感觉。我想要一些关于如何做的建议。链接、文章、示例...现在用户界面被隔离在一个项目中,我不想用CLR编译整个模块。那么我该如何 查看详情

[转]ribbon界面介绍

...己的学习流程,翻译一些MSDN的文档,与大家分享一下,关于界面的一些术语的翻译方法,基本上参考传统的翻译方法和VS2010中关于Ribbon的一些翻译方法,不对的 查看详情

如何在 TypeScript 接口中定义静态属性

...想在typescript界面中声明一个静态属性?我没有找到任何关于这个的地方。interfacemyInterfacestaticName:string;有可能吗?【问题讨论】:你到底想建模什么?考虑使用“classFo 查看详情

关于 MFC 开发的一些问题?

】关于MFC开发的一些问题?【英文标题】:somequestionsaboutMFCdevelopment?【发布时间】:2009-08-0314:55:57【问题描述】:如何在MFC中开发UI?你使用任何免费的库,还是通常从头开始开发?C++开发的软件里总是有这么多的DLL文件,它们... 查看详情

vs2010环境下,mfc如何修改窗体名字?

参考技术A方法1:切换到资源视图--->右击窗体空白部分,选择属性-->修改Caption属性即可;方法2:SetWindowText("标题栏");//执行代码 查看详情

一个关于mfc里listboxcontrol的问题

如何在列表框中显示多个列,像下图这样在资源编辑器中选择ListCtrl,设置属性为Report在OnInitDialog中,调用SetExtendedStyle设置扩展风格为LVS_EX_GRIDLINESDWORDdwStyle=m_list.GetExtendedStyle();//dwStyle|=LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只... 查看详情

将最小化框添加到 MFC 属性表系统菜单

...Sheetsystemmenu【发布时间】:2012-01-1808:28:04【问题描述】:如何将最小化和最大化框添加到CMFCPropertySheet的系统菜单中。我尝试通过修改样式CMFCPropertySheet::ModifyStyle(NULL,WS_SYSMENU);但什么也没发生。【问题讨论】:【参考方案1】 查看详情

vs2010/mfc编程入门之五十四(ribbon界面开发:使用更多控件并为控件添加消息处理函数)

 上一节中鸡啄米讲了为RibbonBar添加控件的方法。本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数。       一、为RibbonBar添加更多Ribbon控件... 查看详情

如何修改网卡的dns地址?

...样如果其中一个DNS服务器出现问题,另外一个也可以返回关于这个域名的数据。DNS服务器也可以有两个以上,但所有这些DNS服务器上的DNS记录都应该是相同的。在DNS服务器中保留有该域名的DNS记录,比如A记录,MX记录。A记录是... 查看详情

如何使用 MFC 以编程方式更改 ActiveX 控件的属性?

】如何使用MFC以编程方式更改ActiveX控件的属性?【英文标题】:HowtochangeActiveXcontrol\'spropertyprogrammaticallywithMFC?【发布时间】:2011-11-3002:00:30【问题描述】:我在我的MFC项目中添加了一个activex控件,我没有使用对话框编辑器添加... 查看详情