我有一个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消息,文档还远远不清楚,但是我可以在谷歌群组和互联网上非常有限地搜索它,它看起来像是由第三方应用程序发送而不是由Windows本身发送,除非Window是一个ANSI窗口(CreateWindowA和所有这些).您是否尝试过手动向窗口发送WM_UNICHAR消息以查看会发生什么?如果您收到消息,那么您的消息调度代码没有任何问题,并且没有任何事情会导致WM_UNICHAR.你也可以查看Spy ++,看看你是否收到了这条消息,但我怀疑它还没有被发送.