青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

用VC++打造有多語言菜單的應用程序

隨著計算機技術的快速發(fā)展,軟件的交流越來越頻繁,軟件的國際化已成為一個軟件開發(fā)人員不可回避的一個問題。所謂軟件的國際化,就是讓軟件界面支持多種語言,從而可以被很多國家的人使用。為了使應用程序支持多種語言,一個很好的辦法就是使用動態(tài)鏈接庫,將不同的語言資源放入不同的庫中,根據需要程序加載不同的動態(tài)庫,從而實現程序的國際化。但是這種方法實現起來不很方便,對軟件開發(fā)人員要求較高,尤其是對于初學者,難度較大。為了解決這個問題,以實現多語言菜單為例,筆者介紹在VC編程中一種簡單實現方法,從而實現軟件的國際化支持。下圖一給出了中英文菜單的應用程序界面:

clip_image001
a)中文菜單

clip_image002
(b
)英文菜單

圖一、多語言菜單支持的應用程序


  一、實現方法

  假如Visual C++6.0中生成的應用程序默認的菜單為中文,我們?yōu)榱耸箲贸绦虻牟藛沃С钟⑽模紫刃枰o應用程序添加英文菜單,讀者朋友首先想到的可能是利用Visual C++提供的資源編輯器,這種方法當然可行,但是還有一種更方便更快捷的方法。首先用Windows的小程序"記事本"以文本的形式打開項目中的資源文件(.rc文件),找到項目中的菜單文本,內容如下:

IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "
文件(&F)"
BEGIN
MENUITEM "
新建(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM "
打開(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM "
保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM "
另存為(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "
打印(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM "
打印預覽(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "
打印設置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "
最近文件", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM "
退出(&X)", ID_APP_EXIT
END
POPUP "
編輯(&E)"
BEGIN
MENUITEM "
撤消(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "
剪切(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM "
復制(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM "
粘貼(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "
查看(&V)"
BEGIN
MENUITEM "
工具欄(&T)", ID_VIEW_TOOLBAR
MENUITEM "
狀態(tài)欄(&S)", ID_VIEW_STATUS_BAR
END
POPUP "
幫助(&H)"
BEGIN
MENUITEM "
關于 MutiLanguageMenu(&A)...", ID_APP_ABOUT
END
END


  將上述內容復制一份,拷貝到該資源文件的后面,并將上面內容的第一行修改為"IDR_English_MAINFRAME MENU PRELOAD DISCARDABLE",這樣作也就是為英文菜單起了一個叫"IDR_MAINFRAME_ENGLISH"的名字。最后將各個菜單項目的中文說明修改為英文說明,內容如下:

"IDR_Englishi_MAINFRAME MENU PRELOAD DISCARDABLE"
BEGIN
POPUP "File(&F)"
BEGIN
MENUITEM "New(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM "Open(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM "Save(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM "Save As(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "Print(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM "PrintView(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM "Print Setup(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Recent Files", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM "Exit(&X)", ID_APP_EXIT
END
POPUP "Edit(&E)"
BEGIN
MENUITEM "Undo(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM "Cut(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM "Copy(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM "Paste(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "View(&V)"
BEGIN
MENUITEM "ToolBar(&T)", ID_VIEW_TOOLBAR
MENUITEM "StatusBar(&S)", ID_VIEW_STATUS_BAR
END
POPUP "Help(&H)"
BEGIN
MENUITEM "About MutiLanguageMenu(&A)...", ID_APP_ABOUT
END
END


  修改過程序的資源文件并存盤退出后,接著要作的是在程序的CMainFrame類中加入變量CMenu m_CurrentMenu對象,用來根據需要裝載中文或英文菜單資源。CMenu類是MFC提供的管理菜單的類,該類的LoadMenu()函數來裝載菜單資源,函數的原型如下:

BOOL LoadMenu( UINT nIDResource );


  函數中的參數nIDResource是菜單資源的ID號。如果函數調用成功返回"TRUE",否則返回"FLASE"

  菜單資源裝載后,需要將該菜單設置為程序的當前菜單,這需要使用CWnd類的SetMenu()函數,該函數的原型如下:

BOOL SetMenu( CMenu* pMenu );


  函數中的參數為一個指向菜單對象的指針。如果函數調用成功返回"TRUE",否則返回"FLASE"

  另外,為了能夠動態(tài)的設置程序的菜單,還需要加入枚舉變量enum Enum{e,c}m_Current。例如,如果當前需要將程序設置為"中文菜單",可以給m_Current一個初始值"c",如果該變量等于:"e"時說明項目選擇了英文菜單。

  二、編程步驟

  1、 啟動Visual C++6.0,生成一個單文檔視圖結構的程序,命名為"MutiLanguageMenu"

  2、 啟動Widows"記事本"程序,修改程序的資源文件;

  3、 給應用程序的CmainFrame類添加CMenu類對象m_CurrentMenu以及枚舉變量enum Enum{e,c}m_Current
 
  4、 添加代碼,編譯運行程序。

  三、程序代碼

/////////////////////////////////////////////////////////
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |
CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS |
CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  TRACE0("Failed to create toolbar\n");
  return -1; // fail to create
 }
 if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("Failed to create status bar\n");
  return -1; // fail to create
 }
 // TODO: Delete these three lines if you don't want the toolbar to
 // be dockable
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);
 if(m_Current==c)
  m_CurrentMenu.LoadMenu(IDR_MAINFRAME);
 else
  m_CurrentMenu.LoadMenu("IDR_English_MAINFRAME");
  SetMenu(&m_CurrentMenu);//設置界面菜單;
 return 0;
}


  四、小結

  本實例中的代碼通過設置m_Current的不同值,將程序編譯成不同的語言版本。其實還可以在程序中添加菜單來讓用戶動態(tài)的改變程序的菜單,具體實現方法讀者朋友們讀到這兒應該不會再有什么疑惑了。另外,對于程序的動態(tài)菜單的實現,還有一種簡單的實現方法是隨應用程序發(fā)行一個文本文件,程序根據不容的需要從該文本文件中讀取不同的字符串資源,然后將所讀取的字符串做為"標題"賦給相應的菜單項。

 

posted on 2009-07-27 18:59 肥仔 閱讀(854) 評論(0)  編輯 收藏 引用 所屬分類: VC 存檔

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲美女中出| 欧美高清视频免费观看| 国产精品视频最多的网站| 免费看精品久久片| 欧美成人自拍视频| 欧美日韩国产不卡| 国产精品啊啊啊| 国产欧美日韩视频在线观看| 国产日韩专区在线| 1024国产精品| 夜夜精品视频| 欧美诱惑福利视频| 免费不卡亚洲欧美| 一本综合精品| 久久精品国产久精国产一老狼| 久久免费视频在线观看| 欧美国产精品va在线观看| 亚洲最新视频在线| 美女视频黄 久久| 欧美激情自拍| 国产精品电影在线观看| 激情另类综合| 亚洲欧美激情四射在线日| 久久人人爽人人| 亚洲欧洲精品一区二区三区不卡| 久久综合久久久| 亚洲精品久久久久| 欧美一区二区视频在线观看2020| 免费观看久久久4p| 国产日本欧美视频| 亚洲激情网站| 亚洲一区二区成人在线观看| 欧美大片91| 亚洲国产欧美一区| 久久国产99| 99亚洲视频| 欧美在线视频观看| 免费不卡在线视频| 亚洲免费在线视频一区 二区| 欧美大成色www永久网站婷| 韩国精品主播一区二区在线观看| 亚洲午夜日本在线观看| 欧美激情视频在线播放| 久久久7777| 国产欧美一二三区| 在线亚洲精品福利网址导航| 另类激情亚洲| 西西裸体人体做爰大胆久久久| 欧美精品一区二区三区蜜桃| 精品99一区二区| 久久久国产精彩视频美女艺术照福利| 亚洲免费黄色| 欧美精品一区三区| 亚洲美女黄网| 亚洲国产经典视频| 免费成人毛片| 欧美激情视频免费观看| 亚洲三级影片| 亚洲国产二区| 欧美激情国产高清| 亚洲欧洲另类国产综合| 老牛嫩草一区二区三区日本| 久久精品国产久精国产思思| 狠狠操狠狠色综合网| 久久夜色精品国产亚洲aⅴ| 亚洲国产精品久久久久秋霞不卡| 欧美与黑人午夜性猛交久久久| 国产免费观看久久黄| 久久综合狠狠综合久久综青草 | 亚洲国产精品va在线看黑人| 亚洲欧洲视频在线| 久久久999精品免费| 亚洲国产日韩一级| 欧美激情1区2区3区| 亚洲欧美日韩成人| 国产日韩精品一区二区三区| 亚洲精品视频免费观看| 亚洲午夜激情网站| 欧美一区二区三区视频在线| 国产亚洲亚洲| 亚洲国产美女| 欧美日韩国产色站一区二区三区| 99视频精品| 欧美高清不卡| 六十路精品视频| 麻豆亚洲精品| 亚洲视频碰碰| 午夜精品久久| 最新国产乱人伦偷精品免费网站 | 亚洲在线观看视频| 亚洲欧美在线看| 亚洲国产成人av在线| 亚洲另类春色国产| 国产欧美日韩| 欧美成人午夜剧场免费观看| 欧美另类在线播放| 亚洲影音一区| 午夜在线精品偷拍| 99国产精品私拍| 午夜一区不卡| 亚洲精品精选| 亚洲免费小视频| 亚洲国产精品va在线看黑人| 亚洲高清资源| 国产情侣久久| 亚洲免费成人av| 1024欧美极品| 久久成人在线| 亚洲欧美精品一区| 免费久久99精品国产自在现线| 久久se精品一区精品二区| 久久久综合激的五月天| 在线亚洲高清视频| 久久男女视频| 欧美一区1区三区3区公司| 欧美大尺度在线观看| 久久成人免费视频| 国产精品成人在线观看| 亚洲人精品午夜| 在线免费观看日本一区| 欧美一区二区三区久久精品| 亚洲一区二区视频| 欧美福利在线| 亚洲第一福利社区| 在线观看日韩av| 欧美一区永久视频免费观看| 亚洲欧美久久久久一区二区三区| 欧美精品一区在线播放| 欧美激情亚洲视频| 最新中文字幕亚洲| 欧美国产精品日韩| 亚洲国产一区二区三区a毛片| 在线免费高清一区二区三区| 久久久xxx| 久久久在线视频| 国产综合色精品一区二区三区| 欧美一级专区| 久久性天堂网| 亚洲国产一区二区三区高清| 久久久久久国产精品mv| 久久久久久久999| 国模精品一区二区三区色天香| 欧美一区二区三区视频| 蜜桃精品久久久久久久免费影院| 激情一区二区| 久久婷婷综合激情| 亚洲国产精品日韩| 日韩午夜免费| 国产精品白丝av嫩草影院| 亚洲在线观看视频| 久久精品一区二区三区不卡牛牛| 国产视频精品xxxx| 久久综合色天天久久综合图片| 亚洲第一区中文99精品| 一区二区三区久久久| 国产精品你懂的| 久久精品91久久久久久再现| 欧美国产日韩一区二区| 国产精品99久久久久久www| 国产精品大全| 久久国产一二区| 免费日韩精品中文字幕视频在线| 亚洲欧洲视频在线| 国产精品美女久久久久av超清 | 99riav久久精品riav| 午夜日韩在线| 136国产福利精品导航网址| 欧美激情亚洲自拍| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 久久久xxx| 日韩午夜在线| 国产一区二区在线免费观看| 国产精品99久久久久久久久久久久| 欧美成人一区二区三区在线观看| 欧美成人福利视频| aa亚洲婷婷| 伊人色综合久久天天| 欧美日韩亚洲综合在线| 久久久久久久国产| 国产精品99久久99久久久二8 | 亚洲综合色在线| 欧美激情精品久久久久久| 在线综合亚洲欧美在线视频| 国产亚洲欧美中文| 欧美色欧美亚洲高清在线视频| 久久国产精品99国产| 99在线精品观看| 久久婷婷麻豆| 欧美一区二粉嫩精品国产一线天| 亚洲电影视频在线| 国产午夜精品视频| 欧美午夜宅男影院| 欧美大香线蕉线伊人久久国产精品| 亚洲影院免费观看| 亚洲日本视频| 亚洲国产欧美一区二区三区久久| 久久久亚洲欧洲日产国码αv | 亚洲国产成人av好男人在线观看| 国产精品视频网址| 国产精品爱啪在线线免费观看|