winAPI 中 L 前缀( LPCWSTR 类型转换)的问题
Problem with the L prefix ( LPCWSTR typecast) in winAPI
我是 winAPI 的新手,遇到了一个我似乎无法解决的问题...google 也找不到解决方案。
我的程序有几个大小相似的按钮,所以我制作了一个宏来隐藏所有乱七八糟的东西。原始宏是:
#define _BUTTON(s, x, y, v) CreateWindowW(L"Button", (L)s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
但是,在 s
或 L
上,无论有没有括号,“L(s)
”都不起作用。我还尝试将 L
替换为 LPCWSTR
、WCHAR*
、_T()
等...编译器错误始终相同:"L (or LPCWSTR, etc) is not declared in this scope"
虽然我认为它应该是...
现在我通过使用非 Unicode 解决了这个问题:
#define _BUTTON(s, x, y, v) CreateWindow("Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
但我希望所有 windows 都支持相同的字符...问题出在哪里?
RbMm 提到的一种方法,luke:
#define Create_Button(s, x, y, v) CreateWindowW(L"Button", L##s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
另一种方法是使用通用方法:
#define Create_ButtonA(s, x, y, v) CreateWindowA("Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
#define Create_ButtonW(s, x, y, v) CreateWindowW(L"Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
#ifdef _UNICODE
#define Create_Button(s, x, y, v) Create_ButtonW(s, x, y, v)
#else
#define Create_Button(s, x, y, v) Create_ButtonA(s, x, y, v)
#endif
用法:
Create_Button(TEXT("name"),10,10,2);
Create_ButtonA("name",10,10,2);
Create_ButtonW(L"name",10,10,2);
我是 winAPI 的新手,遇到了一个我似乎无法解决的问题...google 也找不到解决方案。
我的程序有几个大小相似的按钮,所以我制作了一个宏来隐藏所有乱七八糟的东西。原始宏是:
#define _BUTTON(s, x, y, v) CreateWindowW(L"Button", (L)s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
但是,在 s
或 L
上,无论有没有括号,“L(s)
”都不起作用。我还尝试将 L
替换为 LPCWSTR
、WCHAR*
、_T()
等...编译器错误始终相同:"L (or LPCWSTR, etc) is not declared in this scope"
虽然我认为它应该是...
现在我通过使用非 Unicode 解决了这个问题:
#define _BUTTON(s, x, y, v) CreateWindow("Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
但我希望所有 windows 都支持相同的字符...问题出在哪里?
RbMm 提到的一种方法,luke:
#define Create_Button(s, x, y, v) CreateWindowW(L"Button", L##s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
另一种方法是使用通用方法:
#define Create_ButtonA(s, x, y, v) CreateWindowA("Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
#define Create_ButtonW(s, x, y, v) CreateWindowW(L"Button", s, WS_VISIBLE | WS_CHILD, x, y, 75, 25, hWnd, (HMENU)v, 0, 0);
#ifdef _UNICODE
#define Create_Button(s, x, y, v) Create_ButtonW(s, x, y, v)
#else
#define Create_Button(s, x, y, v) Create_ButtonA(s, x, y, v)
#endif
用法:
Create_Button(TEXT("name"),10,10,2);
Create_ButtonA("name",10,10,2);
Create_ButtonW(L"name",10,10,2);