我有一个 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/