做圖網(wǎng)站有哪些東西嗎建網(wǎng)站用什么軟件
簡(jiǎn)介
最近在搞一個(gè)老外的項(xiàng)目,本來(lái)談的好好的,純英文界面。項(xiàng)目接近尾聲了,又提出了中英文實(shí)時(shí)切換的新需求,沒(méi)辦法就只能想辦法,畢竟客戶(hù)最大嘛。
實(shí)現(xiàn)方法
還好本來(lái)的ribbon英文菜單不復(fù)雜,就用純C++編碼的方式實(shí)現(xiàn)了中英文切換。方法如下:
1)添加一個(gè)ribbon分類(lèi),取名為"Language"
2) 在"Language"分類(lèi)里添加一個(gè)Panel, 在Panel里添加一個(gè)Button, Button的名稱(chēng)為"Chinese"。
3) 為"Chinese"按鈕添加消息響應(yīng)函數(shù)。
4) 接下來(lái)就是在響應(yīng)函數(shù)里編寫(xiě)切換的內(nèi)容了。
Ribbon資源圖
Chinese按鈕屬性
添加消息響應(yīng)函數(shù)
編程實(shí)現(xiàn)中英文切換
void CMainFrame::OnLanguage()
{//新添加的"Languae"在第5個(gè)分類(lèi)欄,所以GetCategory(5)//Panel就一個(gè),所以GetPanel(0)//按鈕就一個(gè),所以GetElement(0)//獲取按鈕上的文本,判斷是"Chinese"還是“中文”CString str = m_wndRibbonBar.GetCategory(5)->GetPanel(0)->GetElement(0)->GetText();if (str == "Chinese") {if (IsValidCodePage(2052)) {MessageBox("The language Chinese Simplified PRC is not supported in this system.");return;}theApp.m_Lang = 2052;m_wndRibbonBar.GetCategory(0)->SetName("中文分類(lèi)0");m_wndRibbonBar.GetCategory(0)->GetPanel(0)->GetElement(0)->SetText("按鈕001");m_wndRibbonBar.GetCategory(1)->SetName("中文分類(lèi)1");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(0)->SetText("按鈕111");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(2)->SetText("按鈕112");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(4)->SetText("按鈕113");m_wndRibbonBar.GetCategory(1)->GetPanel(1)->GetElement(0)->SetText("按鈕121");m_wndRibbonBar.GetCategory(1)->GetPanel(2)->GetElement(0)->SetText("檢查框131");m_wndRibbonBar.GetCategory(1)->GetPanel(2)->GetElement(2)->SetText("檢查框132");m_wndRibbonBar.GetCategory(2)->SetName("中文分類(lèi)2");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(0)->SetText("按鈕211");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(2)->SetText("按鈕212");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(4)->SetText("按鈕213");m_wndRibbonBar.GetCategory(3)->SetName("中文分類(lèi)3");m_wndRibbonBar.GetCategory(3)->GetPanel(0)->GetElement(0)->SetText("按鈕311");m_wndRibbonBar.GetCategory(3)->GetPanel(0)->GetElement(2)->SetText("按鈕312");m_wndRibbonBar.GetCategory(4)->SetName("中文分類(lèi)4");m_wndRibbonBar.GetCategory(4)->GetPanel(0)->GetElement(0)->SetText("按鈕411");m_wndRibbonBar.GetCategory(5)->SetName("語(yǔ)言");m_wndRibbonBar.GetCategory(5)->GetPanel(0)->GetElement(0)->SetText("英文");}else {if (IsValidCodePage(1033)) {MessageBox("英文啟動(dòng)不支持,系統(tǒng)不能識(shí)別英文.");return;}theApp.m_Lang = 1033;m_wndRibbonBar.GetCategory(0)->SetName("Category0");m_wndRibbonBar.GetCategory(0)->GetPanel(0)->GetElement(0)->SetText("Button001");m_wndRibbonBar.GetCategory(1)->SetName("Category1");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(0)->SetText("Button111");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(2)->SetText("Button112");m_wndRibbonBar.GetCategory(1)->GetPanel(0)->GetElement(4)->SetText("Button113");m_wndRibbonBar.GetCategory(1)->GetPanel(1)->GetElement(0)->SetText("Button121");m_wndRibbonBar.GetCategory(1)->GetPanel(2)->GetElement(0)->SetText("Checkbox131");m_wndRibbonBar.GetCategory(1)->GetPanel(2)->GetElement(2)->SetText("Checkbox132");m_wndRibbonBar.GetCategory(2)->SetName("Category2");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(0)->SetText("Button211");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(2)->SetText("Button212");m_wndRibbonBar.GetCategory(2)->GetPanel(0)->GetElement(4)->SetText("Button213");m_wndRibbonBar.GetCategory(3)->SetName("Category3");m_wndRibbonBar.GetCategory(3)->GetPanel(0)->GetElement(0)->SetText("Button311");m_wndRibbonBar.GetCategory(3)->GetPanel(0)->GetElement(2)->SetText("Button312");m_wndRibbonBar.GetCategory(4)->SetName("Category4");m_wndRibbonBar.GetCategory(4)->GetPanel(0)->GetElement(0)->SetText("Button411");m_wndRibbonBar.GetCategory(5)->SetName("Language");m_wndRibbonBar.GetCategory(5)->GetPanel(0)->GetElement(0)->SetText("Chinese");}//這兩行一定要加,否則ribbon不會(huì)重新計(jì)算位置和重畫(huà)。m_wndRibbonBar.ForceRecalcLayout();m_wndRibbonBar.RedrawWindow();
}
注意事項(xiàng)
在上面的代碼中,可以看到有寫(xiě)panel里面獲取element時(shí),并不是0,1,2那樣緊挨著獲取的Element,而是0,2,4這樣獲取的Element。
那是因?yàn)镻anel里面除了按鈕之外,還有Seperator,就是分割線(xiàn),他們是一種沒(méi)有文本的分割線(xiàn)。所以要跳過(guò)分割線(xiàn)。
小結(jié)
這種通過(guò)硬編碼的方式修改Ribbon界面的方式比較笨,但是好在確實(shí)十分有效。目前我的項(xiàng)目已經(jīng)在客戶(hù)那里驗(yàn)證通過(guò)了,也算沒(méi)白費(fèi)。