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);

但是,在 sL 上,无论有没有括号,“L(s)”都不起作用。我还尝试将 L 替换为 LPCWSTRWCHAR*_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);