Windows控件可以是Unicode或ANSI,我的问题是控件属于这两个类别之一是什么意思?
是否如下(如果我假设控件是Unicode):
答案 0 :(得分:6)
这意味着发送到窗口过程的窗口消息将是ANSI或Unicode版本。例如,Unicode窗口将在WM_CREATE
中收到CREATESTRUCTW
,而ANSI窗口将收到CREATESTRUCTA
。
这几乎适用于包含字符串数据的每个窗口消息。
Windows将在内部对数据进行相应的编组。例如,如果将ANSI SendMessageA(WM_SETTEXT, ...)
调用到Unicode窗口,则窗口将收到带有Unicode字符串的WM_SETTEXT
。
窗口将是Unicode或ANSI,具体取决于其类是使用RegisterClassExA
还是RegisterClassExW
注册的。您可以通过调用IsWindowUnicode
来测试窗口是否为Unicode。
有关常见控件的一些信息,因为这似乎就是您所说的。
首先,ANSI窗口是Unicode窗口的父窗口没有问题。还要记住,“控件”只是窗口。
常用控件始终 Unicode。他们收到的消息将采用本机Unicode格式。当然你不会看到它,因为它都是操作系统内部的(例外:如果你是一个公共控件的子类)。
您通常处理的邮件将以WM_COMMAND
或WM_NOTIFY
的形式发送到您的窗口。这些消息从公共控件发送到其父窗口(您的窗口)。他们会尊重您的窗口是Unicode或ANSI,如下所示:
WM_NOTIFYFORMAT
消息,询问您是希望以ANSI或Unicode格式接收消息(尽管您的窗口是Unicode或ANSI)。IsWindowUnicode
来确定。所以基本上,你永远不需要知道一个公共控件是否是Unicode,因为1)它总是,2)这个问题只与处理消息有关,这是Windows内部的,而不是你的责任。
您的责任是处理从公共控件到您自己的窗口的通知。在这种情况下,您自己窗口的Unicode / ANSI-ness非常重要。