Winapi - прохождение LPWCSTR как LPCSTR - PullRequest
1 голос
/ 09 января 2020

Я использую CreateWindowEx, который расширяется до CreateWindowExA. Эта функция использует типы LPCSTR. Я хотел бы передать в качестве второго аргумента MSFTEDIT_CLASS (из Richedit.h):

#define MSFTEDIT_CLASS L"RICHEDIT50W"

Следующее приведение не работает:

(LPCSTR)MSFTEDIT_CLASS

CreateWindowEx возвращает NULL. Это работает, когда я передаю второй аргумент следующим образом:

"RICHEDIT50W"

, но я не хочу копировать строку из заголовка. Как это исправить?

1 Ответ

6 голосов
/ 09 января 2020

Здесь есть только одно жизнеспособное решение: вызовите CreateWindowExW, либо напрямую, либо определив символ препроцессора UNICODE, и расшифруйте отображение c -text CreateWindowEx до CreateWindowExW.

Окно, которое вы создаете, всегда является окном Unicode. Набор символов, используемый для связи с окном, устанавливается во время регистрации класса. Класс окна с именем "RICHEDIT50W" регистрируется системой с помощью RegisterClassExW . Вы не можете это контролировать.

Поскольку в конечном итоге вам придется разговаривать с окном с помощью сообщений, вам нужно будет использовать Unicode-варианты функций обработки сообщений (GetMessageW, DispatchMessageW, et c.). Вы не можете использовать версии ANSI, если вы не довольны приложением, которое иногда не перестает работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...