若要利用 Unicode 的 MFC 和 C 執行時間支援,您需要:
定義
_UNICODE。在建置程式之前定義符號
_UNICODE。指定進入點。
在專案的屬性頁對話框中,連結器資料夾的進階頁面上,將進入點符號設定為
wWinMainCRTStartup。使用可攜式運行時間函式和類型。
使用適當的 C 執行時間函式來處理 Unicode 字串。 您可以使用
wcs函數系列,但您可能更偏好具備國際化能力的完全可移植_TCHAR巨集。 這些巨集全都加上了_tcs作為前綴,每個巨集都會逐一替換str函數系列的函數。 這些函式在國際化一節中的執行時期程式庫參考中詳細說明。 如需詳細資訊,請參閱 tchar.h 中的泛型文字對應。使用
_TCHAR和在 支援 Unicode 功能中所述的相關可攜式數據類型。正確處理常值字串。
Visual C++ 編譯程式會將編碼為的常值字串解譯為:
L"this is a literal string"表示 Unicode 字元的字串。 您可以針對字面字符使用相同的前置詞。
_T宏的用法是以通用方式撰寫字面字串的程式碼,因此在啟用 Unicode 時,它們會編譯為 Unicode 字串,否則會編譯為 ANSI 字串(包括 MBCS)。 例如,不要這樣撰寫:pWnd->SetWindowText( "Hello" );使用:
pWnd->SetWindowText( _T("Hello") );若
_UNICODE已定義,_T會將常值字串轉譯為 L 前置詞格式,否則會_T轉譯不含 L 前置詞的字串。提示
_T巨集與_TEXT巨集相同。請小心將字串長度傳遞至函式。
某些函式想要字串中的字元數;其他則想要位元組數目。 例如,如果
_UNICODE已定義,對物件的下列呼叫CArchive將無法運作(str為CString):archive.Write( str, str.GetLength( ) ); // invalid在 Unicode 應用程式中,長度會提供字元數,但無法提供正確的位元陣數目,因為每個字元寬 2 個字節。 相反地,您必須使用:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid,指定要寫入的正確位元組數目。
不過,以字元為導向的 MFC 成員函式,而不是位元組導向,不需要撰寫額外的程式代碼即可運作:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOut接受的是字元數,而不是位元組數。使用 fopen_s,_wfopen_s 開啟 Unicode 檔案。
總而言之,MFC 和執行階段庫提供下列的 Unicode 程式設計支援:
除了資料庫類別成員函式之外,所有 MFC 函式都已啟用 Unicode,包括
CString。CString也提供 Unicode/ANSI 轉換函式。執行時期程式庫提供所有字串處理函式的 Unicode 版本。 (執行階段庫也提供適用於 Unicode 或 MBCS 的可攜式版本。這些是
_tcs巨集。)tchar.h 提供可攜式數據類型和
_T巨集來翻譯常值字串和字元。 如需詳細資訊,請參閱 tchar.h 中的泛型文字對應。執行時函式庫提供的寬字元版本
main。 使用wmain讓應用程式具備 Unicode 感知能力。