Проблема с префиксом L (тип LPCWSTR) в winAPI - PullRequest
0 голосов
/ 19 января 2020

Я новичок в 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);

Однако «L(s)» не работает с или без скобок, на s или L. Я также пытался заменить L на LPCWSTR, WCHAR*, _T(), et c ... Ошибка компилятора всегда одна и та же: "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 поддерживали одинаковые символы ... В чем проблема?

1 Ответ

3 голосов
/ 20 января 2020

Один способ - это то, что обозначено в RbMm, например:

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