Winapi - 将 LPWCSTR 作为 LPCSTR 传递

Irb*_*bis 1 c c++ winapi

我使用扩展为 CreateWindowExA 的 CreateWindowEx。该函数使用 LPCSTR 类型。我想作为第二个参数传递 MSFTEDIT_CLASS(来自 Richedit.h):

#define MSFTEDIT_CLASS L"RICHEDIT50W"
Run Code Online (Sandbox Code Playgroud)

以下铸造不起作用:

(LPCSTR)MSFTEDIT_CLASS
Run Code Online (Sandbox Code Playgroud)

CreateWindowEx 返回 NULL。当我以这种方式传递第二个参数时它起作用:

"RICHEDIT50W"
Run Code Online (Sandbox Code Playgroud)

但我不想从标题中复制字符串。如何解决?

IIn*_*ble 6

这里只有一个可行的解决方案:CreateWindowExW直接调用或通过定义UNICODE预处理器符号并将通用文本映射CreateWindowEx扩展为CreateWindowExW.

您正在创建的窗口始终是 Unicode 窗口。用于与窗口通信的字符集在类注册时设置。命名的窗口类"RICHEDIT50W"是由系统使用RegisterClassExW 注册的。你无法控制这个。

既然你最终将不得不谈谈使用消息的窗口,你将需要使用的消息处理函数(Unicode的变种GetMessageWDispatchMessageW等)。您不能使用 ANSI 版本,除非您对有时不会失败的应用程序感到满意。