TN057: 本地化的 MFC 元件
![]() |
---|
由於它第一次線上文件中包含尚未更新下列技術提示。如此一來,某些程序和主題可能已經過期或不正確。如需最新資訊,建議您先搜尋線上文件索引中有興趣的主題。 |
這張便箋描述一些設計和程序,可用來當地語系化您的元件,如果該應用程式或 OLE 控制項,或是使用 MFC 的 DLL。
概觀
其實有兩個問題來解決何時當地語系化會使用 MFC 的元件。首先,您必須將您自己的資源當地語系化 — 字串、 對話方塊以及其他專屬於您的元件的資源。也使用 MFC 所建立的大部分元件包括,以及使用一堆由 MFC 所定義的資源。您必須提供當地語系化的 MFC 資源也。幸運的是,MFC 本身早已經提供數種語言。
此外,您的元件,應該要準備好在它的目標環境 (歐洲或 DBCS 啟用環境) 中執行。大多數的情況下,這取決於應用程式正確地將字元以高位元集合,並在處理以雙位元組字元的字串。MFC 會啟用,預設情況下,這兩個這些環境中,會有一個全球二進位檔,只是以不同的資源,在安裝時期插上用於所有平台上可能的。
當地語系化您的元件資源
當地語系化應用程式或 DLL 應該包括只取代資源,以符合目標語言的資源。對於您自己的資源,這真是特別困難的事: 編輯的資源在資源編輯器中,並建置應用程式。如果您的程式碼會有任何字串或您想要將當地語系化硬式編碼插入 – C++ 原始程式碼中的文字正確地撰寫所有當地語系化作業可透過直接修改的資源。事實上,您可以實作您的元件,以致所有提供的當地語系化的版本但它甚至不必原來的程式碼的組建。這會比較複雜,但也值得它也是要使用的 MFC 本身的機制。您也可當地語系化應用程式藉由將 EXE 或 DLL 檔案載入資源編輯器,並直接編輯的資源。請盡量,同時它需要重複套用這些變更的每次建置新版的應用程式。
若要避免的方法之一是在另一個 DLL,有時稱為附屬 DLL 中找出所有的資源。這個 DLL 再以動態方式載入在執行階段,資源就會從該 DLL,而不是從與您的程式碼的主要模組載入。MFC 會直接支援這種方法。請考慮呼叫 MYAPP 的應用程式。EXE。 它可能會有其所有資源位於 DLL 呼叫 MYRES。DLL。在應用程式的InitInstance將會造成執行下面指令來載入該 DLL,並使 MFC 從該位置載入資源:
CMyApp::InitInstance()
{
// one of the first things in the init code
HINSTANCE hInst = LoadLibrary("myres.dll");
if (hInst != NULL)
AfxSetResourceHandle(hInst);
// other initialization code would follow
.
.
.
}
從此刻起,MFC 將會從該 DLL,而不是從 myapp.exe 載入資源。所有的資源,不過,必須已經存在於該 DLL ; MFC 不會搜尋指定的資源的應用程式的執行個體。同樣也至一般的 Dll,以及 OLE 控制項,則會套用這項技術。安裝程式會將適當的 MYRES 版本。使用者想要哪些資源地區設定而定的 DLL。
就會比較容易建立資源只 DLL。您建立 DLL 專案、 加入您。RC 檔案,並加入必要的資源。如果您有現有的專案不需要使用這項技術時,您可以從該專案中複製的資源。資源檔加入專案之後, 就幾乎可以開始建置專案。您必須執行的作法就是設定連結器選項,包括 /NOENTRY。這會告訴連結器 DLL 有任何項目解數,因為它沒有任何程式碼,它有沒有進入點。
![]() |
---|
在 Visual C++ 4.0 及更新版本的資源編輯器支援多種語言,每個。RC 檔案。這使得它很容易就能管理您的本地化單一專案中。每一種語言的資源是由資源編輯器所產生的前置處理器指示詞所控制。 |
使用所提供的 MFC 當地語系化資源
任何您所建立的 MFC 應用程式就會重複使用從 MFC 兩件事: 程式碼和資源。也就是說,MFC 會有各種錯誤訊息、 內建對話方塊,以及其他資源所使用的 MFC 類別。若要完全當地語系化您的應用程式,您需要不只應用程式的資源,同時也直接來自 MFC 資源當地語系化。MFC 提供一些不同語言的資源檔自動,因此,如果您的目標的語言是其中一個語言已經支援 MFC,您只需要確定您使用那些當地語系化的資源。
本文撰寫時,MFC 會支援中文、 德文、 西班牙文、 法文、 義大利文、 日文及韓文。其中包含這些當地語系化的版本的檔案都位於 MFC\INCLUDE\L.* (「 L 」 代表的當地語系化) 目錄。德文的檔案,例如位於 MFC\INCLUDE\L.DEU。若要使應用程式使用這些 RC 檔案,而不是位於 MFC\INCLUDE 的檔案,將/IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU以 RC 命令列 (這只是一個範例。 您必須以取代您的地區設定的選項,以及安裝 Visual C++ 目錄)。
若您的應用程式使用 MFC 靜態連結,將使用先前的指令。大部分的應用程式連結,以動態方式 (因為這是即 AppWizard 的預設值)。在這種情況下,不只是將程式碼是以動態方式連結,是使用的資源。如此一來,您可以將資源當地語系化您的應用程式中,但 MFC 實作資源將仍會載入從 MFC7x.DLL (或更新版本) 或 MFC7xLOC.DLL 已經存在。您可以處理這種由兩個不同的角度。
更複雜的方式 (如 MFC7xDEU,德文、 西班牙文、 等等的 MFC7xESP.DLL),其中一個當地語系化的 MFC7xLOC.DLLs 出貨或更新版本,就是,當使用者安裝應用程式安裝到系統目錄的適當的 MFC7xLOC.DLL。這可能會非常複雜,開發人員和一般使用者,因此不建議使用。請參閱技術的附註 56 如需有關這項技巧和它的警告。
要包含在應用程式或 DLL 本身 (或它的附屬 DLL) 的當地語系化的 MFC 資源,如果您正在使用其中一個是最簡單且最安全的方法。這可以避免這些問題的正確地安裝 MFC7xLOC.DLL。若要這樣做,請遵循相同的指示,為靜態 (設定 RC 命令列,正確指向要當地語系化的資源) 上面所列的案例中,除非您必須也移除/D_AFXDLL來定義它即 AppWizard 相加。當/D_AFXDLL是定義,AFXRES。H (和其他 MFC RC 檔) 不會實際定義的任何資源 (因為它們將被取自 MFC Dll 相反)。