我编写了一个 DLL,它导出一个使用 RegisterClassExW
和 CreateWindowExW
创建窗口的函数。每条消息都通过
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/