• <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>

            woaidongmao

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

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

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

            clip_image001
            a)中文菜單

            clip_image002
            (b
            )英文菜單

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


              一、實現方法

              假如Visual C++6.0中生成的應用程序默認的菜單為中文,我們為了使應用程序的菜單支持英文,首先需要給應用程序添加英文菜單,讀者朋友首先想到的可能是利用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 "
            狀態欄(&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"

              另外,為了能夠動態的設置程序的菜單,還需要加入枚舉變量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的不同值,將程序編譯成不同的語言版本。其實還可以在程序中添加菜單來讓用戶動態的改變程序的菜單,具體實現方法讀者朋友們讀到這兒應該不會再有什么疑惑了。另外,對于程序的動態菜單的實現,還有一種簡單的實現方法是隨應用程序發行一個文本文件,程序根據不容的需要從該文本文件中讀取不同的字符串資源,然后將所讀取的字符串做為"標題"賦給相應的菜單項。

             

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

            无码人妻久久一区二区三区免费丨 | 亚洲女久久久噜噜噜熟女| 亚洲一区精品伊人久久伊人 | 久久A级毛片免费观看| 精品国产福利久久久| 久久中文字幕视频、最近更新| 国产精品久久久久久久久久影院| 久久综合给合久久狠狠狠97色 | 五月丁香综合激情六月久久| 69久久夜色精品国产69| 久久伊人精品青青草原日本| 精品久久久久香蕉网| 亚洲国产小视频精品久久久三级| 久久国产欧美日韩精品 | 亚洲国产一成人久久精品| 久久国产精品-久久精品| 国产香蕉久久精品综合网| 久久噜噜电影你懂的| 亚洲国产精品一区二区久久hs| 精品久久久久久无码人妻蜜桃| 久久亚洲AV成人出白浆无码国产 | 久久青草国产手机看片福利盒子| 久久精品亚洲AV久久久无码| 国产成人综合久久久久久| 国产精品美女久久久久网| 久久精品国产亚洲AV久| 色婷婷久久久SWAG精品| 国内精品久久久久国产盗摄| 久久香综合精品久久伊人| 囯产极品美女高潮无套久久久 | 区久久AAA片69亚洲| 久久免费香蕉视频| 超级碰久久免费公开视频| 久久精品麻豆日日躁夜夜躁| 伊人久久大香线蕉亚洲五月天| 久久精品极品盛宴观看| 久久久久免费视频| 久久国产香蕉一区精品| 欧美麻豆久久久久久中文| 青青草国产97免久久费观看| 一本久久精品一区二区|