MFC AfxMessageBox() 簡單問題及-T宏的作用

MFC AfxMessageBox() 簡單問題

AfxMessageBox(“恭喜你過關了");

error: none of the 2 overloads could convert all the argument

但是用 AfxMessageBox(_T("恭喜恭喜,過關了"));就沒有問題。

 

 解決方案:

1:VC8之後的版本創建的工程默認使用UNICODE字符串,帶有_T()宏處理的字符串在編譯時可以自動轉換,不帶這個宏的字符串是按照單字節處理,造成無法適配函數的參數。

<span style="font-size:13px">2:你的環境設置是UNICODE的,所以這個AfxMessageBox只接收UNICODE的字符,要想AfxMessageBox(“恭喜你過關了");
能使用,把VS裏面的,項目->屬性->配置屬性中的字符集,改成多字節字符就OK了 (在VS裏面默認字符集是UNICODE的)! </span>
<span style="font-size:13px">-------------------------------------------------------------------------</span><span style="font-size:13px"></span> 
T("Hello")是一個宏,他的作用是讓你的程序支持Unicode編碼,因爲Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而後者是雙字節方式,方便處理雙字節字符。
 
<span style="color:#000099;">1:C++語言中“_T”是什麼意思? 
Visual C++裏邊定義字符串的時候,用_T來保證兼容性,VC支持ascii和unicode兩種字符類型,用_T可以保證從ascii編碼類型轉換到unicode編碼類型的時候,程序不需要修改。 如果將來你不打算升級到unicode,那麼也不需要_T。</span>
<span style="color:#000099;">_t("hello world") 在ansi的環境下,它是ansi的,如果在unicode下,那麼它將自動解釋爲雙字節字符串,既unicode編碼。 
這樣做的好處,不管是ansi環境,還是unicode環境,都適用。 </span>
 
<span style="color:#ff0000;">2:請問在vc++中的字符串_T("ABC")和一個普通的字符串“ABC”有什麼區別? 

_T("ABC")中的一個字符和漢字一樣,佔兩個字節(unicode編碼)。而在"ABC"中,英文字符佔一個字節,漢字佔兩個字節(ascii編碼)。</span>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章