Windows案頭應用開發-字串的使用

來源:互聯網
上載者:User

MSDN上英語原文 

Windows原生支援UI(使用者介面)元素、檔案名稱等等的Unicode字串。Unicode是首選的字元編碼,因為它支援所有的字元集和語言,Windows使用的是UTF-16編碼的字元,其每一個字元都是一個16位值的編碼,為了與8位的ANSI字元區分,UTF-16字元被稱為寬字元。Visual C++編譯器內建了資料類型wchart_t以對寬字元的支援,標頭檔WinNT.h中還定義了下列的類型定義:

typedef wchar_t WCHAR;

在MSDN範例程式碼中會看到兩個版本,要聲明一個寬字元的字元或字串,將’L’放在前面:

wchar_t a=L’a’;wchar_t *str=L”hello”;

下列是一些其它字串相關的類型定義

類型定義

解釋

CHAR

char

PSTR / LPSTR

char*

PCSTR / LPCSTR

const char*

PWSTR / LPWSTR

wchar_t*

PCWSTR / LPCWSTR

const wchar_t

 

Unicode 和 ANSI 函數

當微軟推出支援Unicode的Windows,為了過渡提供了兩套並行的API,一套支援ANSI字串,另一套支援Unicode字串。例如:以下兩個函數是設定表單標題列的文本:

  •  SetWindowTextA  採用一個ANSI字串
  •  SetWindowTextW  採用一個Unicode字串

 

在系統內,ANSI版本的字串將轉換成Unicode。在Windows的標頭檔裡定義了一個宏來解析Unicode預先處理符號來決定使用的是ANSI版本還是Unicode版本。

#ifdef UNICODE#define SetWindowText setWindowTextW#else#define SetWindowText SetWindowTextA#endif

在MSDN,函數文檔下的名稱使用的是SetWindowsText,即使實際上這是宏名而不是真實的函數名。

 

新的應用程式應該總是調用Unicode版本。世界上許多語言需要Unicode。如果你使用ANSI字串,它會無法本地化應用程式。ANSI版本效率比較低,因為在運行是系統必須將ANSI字串轉化為Unicode。根據你的喜好,你可以明確的調用Unicode版本,如SetWindowTextW,或是使用宏。MSDN的樣本上使用的是調用宏,但是這兩種形式是等價的。Windows大多數較新的API只有Unicode版本而沒有ANSI版本。

 

TCHAR

當應用程式需要支援WindowsNT和Windows95/WIndows98/WindowsME時,根據目標平台,為相同的代碼編譯成ANSI或Unicode字串它是相當有用的。為此,Windows SDK提供了字串映射到Unicode或ANSI的宏。這取決於目標平台

Unicode

ANSI

TCHAR

wchar_t

char

TEXT(“x”)

L”x”

“x”

 

範例程式碼:

 

SetWindowText(TEXT(“My Application”));

解析為以下操作之一:

SetWindowTextW(L”My Application”)); //寬字元字串的Unicode函數SetWindowTextA(“My Application”); //ANSI函數

 

TCHARTEXT宏如今的用處並不大,因為所有的應用程式應該使用Unicode,然而,你可能會在較舊的代碼或MSDN範例程式碼上看到。

 

微軟的C執行階段程式庫的標頭檔定義了一組相似的宏,例如,如果為定義_UNICODE,_tcslen解析為strlen,否則它解析為wcslen,這是strlen的寬字元版本。

#ifdef _NUICODE#define _tcslen wcslen#else#define _tcslen strlen#endif

 

注意: 有些頭是使用前置處理器符號UNICODE,另外一些使用底線首碼_UNICODE。當你建立一個新項目時,預設情況下始終都定義兩個符號。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.