c++ - unicode 窗口中的非 unicode WM_CHAR

标签 c++ windows winapi dll unicode

我编写了一个 DLL,它导出一个使用 RegisterClassExWCreateWindowExW 创建窗口的函数。每条消息都通过

检索
GetMessageW(&msg, wnd_handle, 0, 0);
TranslateMessage(&msg);
DispatchMessageW(&msg);

还有一个程序加载 DLL 并调用该函数。

尽管使用 Unicode 窗口创建方法,WM_CHAR 消息中的 wParam 始终包含 ASCII 字符,即使我键入一些非 ASCII 符号或使用 Alt+(code) 。 wParam 在“A”和“z”之间包含一些 ASCII 字符,而不是 UTF-16。 WndProc 是 DLL 内的静态函数。

当所有与窗口相关的代码都在一个程序中时,不会出现此问题。

是否有办法在 DLL 窗口中始终保留 Unicode WM_CHAR 消息?

最佳答案

问题出在消息检索过程中。我将 GetMessage() 与窗口句柄一起使用,而不仅仅是 0,GetMessageW(&msg, wnd_handle, 0, 0) 而不是 GetMessageW(&msg, 0 , 0, 0)
这样,WM_INPUTLANGCHANGEREQUEST 消息就被吞掉了,语言环境仍然是英语。

关于c++ - unicode 窗口中的非 unicode WM_CHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768844/

相关文章:

c++ - 在 C++ 中找不到相同的旧标识符错误

c++ - 使用 Qt Creator 构建 Stanford CS106B 项目的问题

windows - 使用 Windows 10 编写第一个应用程序时出现 hyperledger Fabric 错误

c++ - OpenMP 性能影响 : private directive vs. 在构造中声明变量

c++ - 如何使用 OpenGL 和 C++ 加载多个纹理?

c++ - QTextEdit 需要越来越多的时间来绘制文本

windows - 从列表中复制文件

c++ - 在遗留 Win32 应用程序中实现 COM 事件接收器

java - 通过进程Id获取进程对象

c - 使用线程实现进度控制