c++ - 为什么我的 WM_UNICHAR 处理程序从未被调用?

标签 c++ com unicode atl

我有一个 ATL 控件,我希望它能够识别 Unicode。我为 WM_UNICHAR 添加了一个消息处理程序:

MESSAGE_HANDLER( WM_UNICHAR, OnUniChar )

但是,由于某种原因,OnUniChar 处理程序永远不会被调用。

根据文档,应首先使用“UNICODE_NOCHAR”调用处理程序,如果要接收 UTF-32 字符,则处理程序应返回 TRUE。但是,正如我所说,处理程序永远不会被调用。

需要做什么特殊的事情才能激活它吗?

最佳答案

您认为应该生成 WM_UNICHAR 消息的操作是什么?

如果您的代码(或 ATL 代码)最终调用 CreateWindowW,则您的窗口已经支持 Unicode,并且 WM_CHAR 消息将是 UTF-16 格式。

文档还不清楚何时生成 WM_UNICHAR 消息,但从我在 Google 网上论坛和互联网上非常有限的探索中收集到的信息来看,它看起来像是由 3rd 方应用程序发送的,而不是由第三方应用程序发送的。由 Windows 本身执行,除非该窗口是 ANSI 窗口(CreateWindowA 等)。您是否尝试过手动向窗口发送 WM_UNICHAR 消息以查看会发生什么情况?如果您收到该消息,那么您的消息调度代码没有任何问题,并且没有发生任何会导致 WM_UNICHAR 的情况。您还可以使用 Spy++ 检查是否收到该消息,但我怀疑它只是没有被发送。

关于c++ - 为什么我的 WM_UNICHAR 处理程序从未被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/378296/

相关文章:

c# - 展望互操作 : How to iterate over all items in folder

c# - 如何在VSTO项目中注册UDF/RTD

php - 从 PHP 从 COM 的 DOTNET 类调用 RNGCrypto

php - sqldatabse 不接受非英文字符

c++ - 从 DOS 8.3 文件名在 Windows 中打开 Unicode 文件名

c++ - Dlib 正面人脸检测在 IOS 中不起作用。?

c++ - const 引用类成员是否会延长临时对象的生命周期?

python - 使用 unicode 时颜色条标签截止

c++ - 理解 C++ 中的 const_cast

c++ - 编译的 C++ 可执行文件巨大?