Winapi GetMessageA和GetMessageW函数之间有什么区别?

Winapi GetMessageA和GetMessageW函数之间有什么区别?,winapi,Winapi,我正在学习编程窗口GUI。我不知道两个函数GetMessageA和GetMessageW之间的区别。我看到GetMessage函数没有任何涉及ANSI或Unicode的参数 所有涉及字符串的旧Win32调用实际上都是宏,可以根据项目的“字符集”属性扩展为Unicode版本或ANSI版本 GetMessage(…)将映射到GetMessageA(…)或GetMessageW(…),其中“A”版本将处理包含ANSI格式文本的字符串的消息,“W”版本将使用UTF-16 只需使用GetMessage()

我正在学习编程窗口GUI。我不知道两个函数GetMessageA和GetMessageW之间的区别。我看到GetMessage函数没有任何涉及ANSI或Unicode的参数

所有涉及字符串的旧Win32调用实际上都是宏,可以根据项目的“字符集”属性扩展为Unicode版本或ANSI版本


GetMessage(…)将映射到GetMessageA(…)或GetMessageW(…),其中“A”版本将处理包含ANSI格式文本的字符串的消息,“W”版本将使用UTF-16

只需使用GetMessage()。编译器会根据项目设置来确定您是需要A版本还是W版本。希望您使用的是默认设置,项目>属性>常规>字符集=使用Unicode字符集。所以您得到了W版本。@Hans我认为如果窗口是ANSI窗口,那么您应该使用
GetMessageA
。当然,使用带有ANSI窗口的Unicode应用程序有些不寻常。GetMessage()与窗口几乎没有关系,99.9%的时间传递NULL。应该避免混合窗口样式,但它是受支持的。@HansPassant我见过一些消息循环,它们调用
PeekMessage
来获取收件人窗口句柄,然后IsWindowUnicode传递该窗口句柄,然后是PeekMessageW或PeekMessageA。我不明白。但是,如果GetMessageW和GetMessageA是相同的,人们就会想知道为什么它们会存在。“我看到GetMessage函数没有任何涉及ANSI或Unicode的参数”-没有,但是单个消息会,比如
WM_GETTEXT
和任何其他传递字符串的消息。如果要创建Ansi窗口,请使用
GetMessageA()
。如果要创建Unicode窗口,请使用
GetMessageW()