我使用扩展为 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)
但我不想从标题中复制字符串。如何解决?
这里只有一个可行的解决方案:CreateWindowExW直接调用或通过定义UNICODE预处理器符号并将通用文本映射CreateWindowEx扩展为CreateWindowExW.
您正在创建的窗口始终是 Unicode 窗口。用于与窗口通信的字符集在类注册时设置。命名的窗口类"RICHEDIT50W"是由系统使用RegisterClassExW 注册的。你无法控制这个。
既然你最终将不得不谈谈使用消息的窗口,你将需要使用的消息处理函数(Unicode的变种GetMessageW,DispatchMessageW等)。您不能使用 ANSI 版本,除非您对有时不会失败的应用程序感到满意。