WinMain與wWinMain,win32的字符集問題


剛接觸win32開發的會發現,用vs新建一個win32項目默認代碼里面的入口函數並不是WinMain而是_tWinMain或者wWinMain,這些都有什么區別呢?

WinMain對應的是多字節字符集(ANSI),wWinMain對應Unicode字符集。_tWinMain是tchar.h文件里面定義的:

#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif

 

編譯時當字符集為ANSI時就同於WinMain,字符集為Unicode時同於wWinMain。

要更改字符集的話,在vs里面點 項目->項目屬性

 

windows api很多函數都分為兩個版本,比如CreateWindow的定義如下:

#ifdef UNICODE
#define CreateWindow  CreateWindowW
#else
#define CreateWindow  CreateWindowA
#endif

 

那么,什么時候該用Unicode字符集,什么時候該用多字節字符集呢?

其實並不是程序中有中文時就必須用Unicode字符集,當windows系統語言為中文時,不管你選擇哪個字符集都是可以正常顯示中文的,但是系統語言不為中文時就會出現亂碼了。所以如果你的軟件需要適應多語言的windows系統的話就得用Unicode字符集。

另外需要說明的是,當字符集為Unicode時,向api函數傳遞的一個字符串的時候應該將該字符串轉換為Unicode編碼的,可用L轉換:

CreateWindow(wndClass, L"這是窗口標題", ......);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM