2011-06-17 43 views
8

開始在這個網站看的Win32 API:http://www.winprog.org/tutorial/start.htmlC中的Win32 - 爲什麼我的文本顯示爲外語?

我真的只是編制的第一個例子,它給了我在中國/日本信息提示,或類似的規定。

問:爲什麼?

顯然就我的理解去,我應該得到「再見,殘酷的世界!」在一個消息框(推測標題爲'Note')。

#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow) 
{ 
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK); 
return 0; 
} 

Foreign...

感謝。

+3

我感到非常驚恐的中國人......和中國消息框:d –

+0

看起來像一個編碼的問題。 –

+2

您正在使用ANSI字符串,但爲Unicode編譯。也許那個網站應該提到一些關於那個...... – Gabe

回答

9

試圖改變這樣的代碼:如果它的工作原理是因爲你缺少一些頭指向正確的API

#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow) 
{ 
MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK); 
return 0; 
} 

,你似乎調用MessageBoxW (unicode版本)和ANSI字符串。如果這不僅僅是一個測試,而且你正在開始編寫一個真實世界的程序,考慮確保你想要使用哪種類型的caracter(通常這是一個預編譯器標誌)。然後使用宏_T(讓您的文字兼容到Unicode/ANSI。

編輯@Benoit評論: 默認情況下,使用VS 2008/10啓動一個新項目會設置unicode字符集。

+0

成功。 :)定時器允許時將標記爲正確。 – Anonymous

+3

我會補充一點:從Visual Studio 2008(或者2010)開始,新項目默認使用Unicode字符集。 – Benoit

+0

硬編碼Unicode字符串與硬編碼ANSI字符串一樣有問題。要麼尊重項目範圍的Unicode設置並使用'_T(「string」)'或明確使用符合ANSI的'MessageBoxA'和符合Unicode的'MessageBoxW'的函數。 –

5
MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK); 

MessageBoxA(NULL, "Goodbye, cruel world!", "Note", MB_OK); 
1

我不能把它設置爲默認的,所以每一個新項目,必須進行設置。 要查找設置: 使用Visual Studio 2010 從主菜單→項目→屬性→配置屬性→常規→項目詳情→字符集→「使用多字節字符集」(被設置爲「使用Unicode字符集」 )

之後,一切似乎都很好。

相關問題