比如大家比较熟悉的MessageBox,它就有两个版本,一个是MessageBoxA,处理ANSI字符串另一个是MessageBoxW用以处理Unicode字符串。既然MessageBox有两个版本为什么平时我们使用时只需要使用MessageBox就行了。这个还是跟宏定义有关。在windows提供的头文件中有这样一句话: #ifdef UNICODE #define MessageBox MessageBoxW #else #d...
typedef wchar_t TCHAR; // 定义了_UNICODE,TCHAR使用宽字符类型 typedef char TCHAR ; // 未定义_UNICODE #define __T(x) L##x // 定义了_UNICODE,粘贴符号(token paste) #define __T(x) x // 未定义_UNICODE #define _T(x)__T(x) // 相同定义宏_T #define _TEXT(x)__T(x) // 相同...
#ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif 这样,我们只用一种类型(比如TCHAR)和一组函数(比如MessageBox)就方便地可以处理两种编码的程序,而不用去条件判断应该用char还是 wchar_t,应该用MessageBoxA还是MessageBoxW。这些细节Windows.h等头文件中已经为我们考虑了,我们要...
#ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NA...
#define UNICODE typedef WCHAR TCHAR,*PTCHAR , PTSTR; typedef COSNTWCHAR *PCTSTR; #define _TEXT(quote) L##quote #else typedef CHAR TCHAR ,*PTCHAR,PTSTR; typedef CONST CHAR *PCTSTR; #define _TEXT(quote) quote #endif #define TEXT(quote) _TEXT(quote) ...
#ifdef UNICODE #define CreateWindowEx CreateWindowExW #else #define CreateWindowEx CreateWindowExA #endif // !UNICODE 7. 如何表示Unicode字符串常量? 字符集 实例 ANSI “string” Unicode L“string” ANSI/Unicode T(“string”)或_TEXT(“string”)if( szError[0] == _TEXT(‘J’) ){ } ...
#define _tcslen wcslen #else#define _tcslen strlen #endif 只不过使用的是 _UNICODE 宏。所以不想让工程出现编码的混乱,显然 UNICODE、_UNICODE 是要成对出现的。事实上,现在用Visual Studio新建工程的时候,默认这两个都会定义上的。 跨平台的坑 对于wchar_t 在 Windows 平台是 UTF-16 编码,是 2 个字节的...
ANSI/Unicode 操作函数以lstr开头 lstrcpy(Windows函数) 所有新的和未过时的函数在Windows2000中都同时拥有ANSI和Unicode两个版本。ANSI版本函数结尾以A表示;Unicode版本函数结尾以W表示。Windows会如下定义: #ifdef UNICODE #define CreateWindowEx CreateWindowExW ...
(lpa, cp) #define W2A_CP(lpw, cp) W2A_CP_EX(lpw, cp) #define A2W_UTF8(lpa) A2W_CP_EX(lpa, CP_UTF8) // 将UTF8转化到Unicode #define W2A_UTF8(lpw) W2A_CP_EX(lpw, CP_UTF8) // 将Unicode转化到UTF8 #define A2A_GBK_UTF8(lpa) W2A_CP_EX(A2W(lpa), CP_UTF8) // 将GBK...
ansi/unicode操作函数以lstr开头lstrcpy(windows函数) 所有新的和未过时的函数在windows2000中都同时拥有ansi和unicode两个版本。ansi版本函数结尾以a表示;unicode版本函数结尾以w表示。windows会如下定义: #ifdef unicode #define createwindowex createwindowexw