最近在工作中,遇到了需要將軟件從中文轉成英文的問題。通常來說,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"));