SetWindowTextW表示設置的字符串是WCHAR (雙字節字符 )
SetWindowTextA表示設置的字符串是CHAR (單字節字符 )
SetWindowText表示設置的字符串是自動匹配當前項目的字符環境是單字節還是雙字節字符
#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#ENDIF //! UNICODE
首先解釋A和W的不同意義:
其實MFC中,凡是涉及字符串處理的API函數都有A和W兩個版本
A結尾的表示使用ANSI編碼:中文的Windows操作系統一般對應的就是GBK,GBK在內存里英文占用一個字節 、漢字兩個字節。
W結尾的表示:
UTF-16版本---英文兩個字節、漢字兩個字節
UTF-32版本---英文四個字節、漢字四個字節
如果確定你的軟件將來只需要英文或漢文字符,那就選擇A版本的API,如果有可能要使用多國文字,那么最好使用W版本的API。
MFC中的源代碼,其實實際上只存在SetWindowTextW和SetWindowTextA,如果你的整個項目字符集是UNICODE格式的字符集,那SetWindowText和SetWindowTextW其實就是一個東西,如果不是UNICODE那SetWindowText就和SetWindowTextA是一個東西。
函數功能:該函數改變指定窗口的標題欄的文本內容(如果窗口有標題欄)。如果指定窗口是一個控件,則改變控件的文本內容。然而,SetWindowText函數不改變其他應用程序中的控件的文本內容。
函數原型:BOOL SetWindowText(HWND hwnd,LPCTSTR lpString);
參數:
hWnd:要改變文本內容的窗口或控件的句柄。
lpString:指向一個空結束的字符串的指針,該字符串將作為窗口或控件的新文本。
返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備注:如果目標窗口屬於當前進程,SetWindowText函數會使WM_SETTEXT消息發送給指定的窗口或控件。然而,如果控件是以WS_CAPTION風格創建的列表框控件,SetWindowText函數將為控件設置文本,而不是為列表項設置文本。
SetWindowText函數不擴展tab字符(ASCII代碼0×09),Tab字符以字符‘}’來顯示。
ANSI和Unicode到底是什么
簡單地說:
ANSI是美國要家標准(我沒有精確用詞,只表示一下意思),每個數字、字母、標點符號都用一個字節表示,漢字用2個字節表示;
UNICODE是國際標准(我沒有精確用詞,只表示一下意思),每個數字、字母、標點符號、漢字都用2個字節表示;
ANSI是歷史發展的中間產物。最終是要淘汰的,盡管我們現在的PC機默認還是ANSI,但它是為了兼容以前的ANSI,新的東西如手機基本上都用UNICODE了。