国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
在VC工程中添加多語言支持

在VC工程中添加多語言支持

(2008-06-18 12:05:26)
標(biāo)簽:

vc多語言支持

資源dll

it

分類: 編程手記

隨著貿(mào)易國際化,在軟件開發(fā)過程中,常會碰到需在現(xiàn)有中文版軟件加入多語言支持的情況。由于不同語言版本間的差別通常僅是軟件操作界面的不同,為實(shí)現(xiàn)多語言支持,使用純資源DLL是一個(gè)不錯(cuò)的解決之道。所謂純資源DLL是指只包含資源的DLL,譬如:快捷鍵、對話框、字符串、菜單、工具條、位圖、圖標(biāo)、版本信息等等。

具體做法是:利用VC可視化編輯環(huán)境為每種語言制作一套資源ID一一對應(yīng)的資源集并編譯生成DLL文件。應(yīng)用程序初始化時(shí)按預(yù)設(shè)的語言設(shè)置選擇合適的資源DLL調(diào)入,使用資源時(shí)依據(jù)資源ID進(jìn)行訪問,這樣即可實(shí)現(xiàn)軟件的多語言支持。當(dāng)然了,應(yīng)用程序退出前,注意將動態(tài)調(diào)入的DLL文件占用的資源釋放。

現(xiàn)有一個(gè)心電圖查看程序,工程名為DispECG,語言為中文,現(xiàn)需加入英文支持。下面根據(jù)這個(gè)具體實(shí)例來說明在VC中加入多語言支持的具體實(shí)施方法。

 

(一)建立純資源DLL

a)打開DispECG工程,在當(dāng)前工作區(qū)中添加一個(gè)工程。方法:使用菜單File\New…

 

b)從彈出的對話框中選擇“Projects”頁面,選擇“Win32 Dynamic-Link Library”,工程名設(shè)置為“DispECG_ENG”,DispECG工程的工作目錄為D:\MyProject\DispECG,DispECG_ENG工程的工作目錄為D:\MyProject\DispECG\DispECG_ENG。選擇添加到當(dāng)前工作區(qū)(注意Dependency of前的框不選),然后按OK。

 

c)建立一個(gè)簡單的DLL工程

 

選擇“A simple DLL project”,然后按“Finish”。此時(shí)新建的DispECG_ENG工程中會建立如下幾個(gè)文件:DispECG_ENG.cpp,StdAfx.cpp,StdAfx.h以及ReadMe.txt。注意沒有后綴為*.RC的資源文件。

 

其中DispECG_ENG.cpp中文件內(nèi)容如下:

        // DispECG_ENG.cpp : Defines the entry point for the DLL application.

        //

      #include "stdafx.h"

      BOOL APIENTRY DllMain( HANDLE hModule,DWORD  ul_reason_for_call,

                                                    LPVOID lpReserved)

        {

                return TRUE;

        }

 

(二)為DispECG_ENG加入資源并編輯

a)使用Windows資源管理器將DispECG工程下的resource.h和DispECG.rc拷貝到DispECG_ENG工程下,將DispECG工程下的res子目錄拷貝到DispECG工程下;

b)使用Windows資源管理器將DispECG_ENG工程下的DispECG.rc改名為DispECG_ENG.rc,將DispECG_ENG\res下的DispECG.rc2改名為DispECG_ENG.rc2;

c)回到VC編輯環(huán)境。選擇工作區(qū)中的文件視(FileView),選擇“DispECG_ENG files”,單擊右鍵,選擇“Add Files to Project…”將DispECG_ENG工程下的resource.h和DispECG_ENG.rc加入到DispECG_ENG工程。

 

資源文件DispECG_ENG.rc及資源ID定義文件resource.h加入工程后:

 

d)修改編輯resource.h和DispECG_ENG.rc

         d.1)將文件頭的注釋“Used by DispECG_ENG.rc”修改為“Used by DispECG_ENG.rc”

         d.2)修改資源文件DispECG_ENG.rc,將

                  "#include ""res\\DispECG.rc2""  // non-Microsoft Visual C++ edited resources\r\n"

                  "#include ""l.chs\\afxres.rc""          // Standard components\r\n"

                  "#include "" l.chs\\afxprint.rc""        // printing/print preview resources\r\n"

                  修改為

                  "#include ""res\\DispECG_ENG.rc2""  // non-Microsoft Visual C++ edited resources\r\n"

                  "#include ""afxres.rc""          // Standard components\r\n"

                  "#include ""afxprint.rc""        // printing/print preview resources\r\n"

需要說明的是:MFC中含有一些預(yù)定義好的資源,不同的語言版本保存在不同的目錄下,英文版保存在MFC\Include下,其它語言的版本則保存在Include的子目錄中,譬如中文版對應(yīng)的目錄為l.chs,日文版對應(yīng)l.jpn,韓文版對應(yīng)l.kor,等等。

e)使用可視化編輯環(huán)境編輯對話框、菜單、字符串、版本等語言依賴性資源,將中文版翻譯為英文版。當(dāng)然,如果對資源文件的結(jié)構(gòu)非常了解,可使用文本編輯器對資源文件直接編輯。方法是:使用“File\Open…”打開文件對化框,找到“DispECG_ENG.rc”,注意打開方式選擇“Text”。

 

完成文本的翻譯是一項(xiàng)費(fèi)時(shí)耗力的體力活兒,請耐心地仔細(xì)地一一做完。

f)修改工程設(shè)置,調(diào)整編譯后DLL文件的存放位置。

由于按照默認(rèn)的工程設(shè)置,DispECG_ENG.DLL的Release版自動生成在D:\My Project\DispECG\DispECG_ENG\Release下,Debug版自動生成在D:\My Project\DispECG\DispECG_ENG\Debug下。為了程序的處理方便,資源DLL最好和應(yīng)用程序的可執(zhí)行文件存放在同一目錄。為做到這一點(diǎn),請修改工程配置。

方法:操作菜單“Project\Project Settings…”

在“Project Settings”中選擇“DispECG_ENG”工程,再選擇“Link”頁面,將輸出文件名由“Release/DispECG_ENG.dll”修改為“../Release/DispECG_ENG.dll”,這樣編譯后生成的DLL文件將保存在D:\My Project\DispECG\Release下。

調(diào)試版也作類似的修改,使得編譯后生成的DLL文件將保存在D:\My Project\DispECG\Debug下。

  

g)編譯DispECG_ENG工程,生成發(fā)行版和調(diào)試版的DispECG_ENG.DLL。

 

(三)在程序中添加多語言支持程序

a) 定義資源名稱

在DispECG工程中的StdAfx.h中添加:

        #define CHINESE          0

        #define    ENGLISH              1

b)定義兩個(gè)全局變量,一個(gè)表示當(dāng)前的語言選擇,另一個(gè)為資源句柄。

        UINT nLanguage = ENGLISH;

        HINSTANCE hResourceHandle = NULL;

c)添加資源DLL載入程序

在完成應(yīng)用程序初始化的BOOL CDispECGApp::InitInstance()中添加依據(jù)語言選擇資源DLL的程序代碼。

        nLanguage = GetProfileInt("SETTINGS","LANGUAGE",ENGLISH);

        if (nLanguage != CHINESE)

        {

                CString strFile;

                strFile = "NewDispECG_ENG.dll";

                hResourceHandle = AfxLoadLibrary(strFile);

                ASSERT(hResourceHandle);

                if (hResourceHandle)

                {

                        AfxSetResourceHandle(hResourceHandle);

                }

                else

                {

                        CString strText;

                        strText.Format("%s not found!",strFile);

                        ::MessageBox(NULL,strText,"Error",MB_OK|MB_ICONERROR);

                        return FALSE;

                }

        }

d)添加資源DLL卸載程序

        CDispECGApp::~CDispECGApp()

        {

                if (hResourceHandle)

                AfxFreeLibrary(hResourceHandle);

        }

e) 添加語言選擇菜單和命令實(shí)現(xiàn)代碼。

同步更新各種版本的資源,編輯菜單加入語言選擇菜單項(xiàng)。注意同一菜單項(xiàng)不同語言版本的命令I(lǐng)D保持一致。

使用類向?qū)砑用铐憫?yīng):

        void CDispECGApp::OnSwitchVersion()

        {

                WriteProfileInt("SETTINGS","LANGUAGE",1-nLanguage);

                AfxMessageBox(ID_SWITCH_VERSION);

                TRACE("%s\n%s\n%d\n

                %s\n",m_pszAppName,m_lpCmdLine,m_nCmdShow,m_pszExeName);

        }

 

(四)修改程序代碼,根據(jù)資源ID調(diào)用資源

如果原先的程序未考慮到多語言支持,在顯示提示信息時(shí)可能使用如下的語句:

        AfxMessageBox("文件無法打開!");

此時(shí)應(yīng)該將諸如"文件無法打開!"此類的字符串添加到字符串資源中,其它語言版本同步更新。同樣,注意字符串ID的彼此一致。一個(gè)好的習(xí)慣是,各版本的資源同步更新后,使用VC開發(fā)環(huán)境自帶的WinDiff.exe對各個(gè)版本下的resource.h進(jìn)行文件內(nèi)容比較,以確保各語言的資源ID彼此完全一致。

修改完畢后,改用根據(jù)資源ID進(jìn)行資源訪問的函數(shù)。在實(shí)際編程中,最常用到的是對字符串資源的訪問以及提示信息的顯示,所以下面這些函數(shù)在需多語言支持的應(yīng)用程序中會常被使用:

int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1 );

BOOL LoadString( UINT nID );

void Format( UINT nFormatID, ... );

void FormatMessage( UINT nFormatID, ... );

...

至于其它資源,比如對話框、菜單等,通常由系統(tǒng)自動完成加載,無需程序員在軟件中進(jìn)行特別處理。

 

(五)編譯調(diào)試

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DLL 中的資源文件 - 萬一的 Delphi
VC 編譯后出現(xiàn)中文亂碼解決方案
Delphi學(xué)習(xí)使用資源文件
如何為 MFC 應(yīng)用程序創(chuàng)建本地化資源 DLL
VS2005純資源DLL編寫與使用【手把手系列】-名刀
在DELPHI 7中如何進(jìn)行多語言系統(tǒng)的開發(fā)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服