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