【问题标题】:Undefined WIN32 messages未定义的 WIN32 消息
【发布时间】:2016-07-06 13:07:44
【问题描述】:

我在 Windows 消息回调中收到奇怪的输入。

除了所有正常消息,如WM_SIZE,可以正常工作,还有一些消息没有出现在任何表格中,如this one。而且它们也没有定义为error codes

消息是:(十进制/十六进制)

  • 356 / 0164(wParam:0,lParam:5760884)

  • 49291 / c08b(wParam:4294967292 或 0,lParam:0)

  • 49348 / c0c4 (wParam: 0, lParam: 0)

有人知道它们的意思,或者我为什么要理解它们吗?

【问题讨论】:

  • 不清楚,为什么您认为消息和错误代码有某种关联。我不知道,第一条消息是什么,但最后两条是应用程序私有消息(WM_APP + x)。它们由接收者定义,没有全局意义。
  • 收到 Windows 消息并不奇怪。你收到的是意料中的,还是误送的,谁说得准。 minimal reproducible example 在哪里?
  • 0x164 似乎是CB_GETCOMBOBOXINFO。您是否正在监视组合框上的消息?
  • 一些 windows 消息确实没有记录,往往是 25 多年前犯下的罪行,他们永远无法再修复。消息 >= 0xc000 很正常,RegisterWindowMessage() 会产生它们。这些消息对 DefWindowProc 或子类窗口过程有意义,它们不是供您使用的。
  • 任何您不期望且未处理的消息都应转发到 DefWindowProc。我不清楚你有什么实际问题。您不需要处理收到的每条消息;其中一些可能不适用于应用程序处理。为什么会有供操作系统私人使用的未记录消息令人惊讶?

标签: c++ winapi message


【解决方案1】:

根据 Win32 文档:

以下是消息编号的范围。

范围含义 0 到 WM_USER–1 保留供系统使用的消息。 WM_USER 到 0x7FFF 整数消息,供私有窗口类使用。 WM_APP (0x8000) 到 0xBFFF 可供应用程序使用的消息。 0xC000 到 0xFFFF 应用程序使用的字符串消息。 大于 0xFFFF 系统保留。

第一个范围(0 到 WM_USER –1)中的消息编号由系统定义。此范围内未明确定义的值由系统保留。

第二个范围(WM_USER 到 0x7FFF)中的消息编号可以由应用程序定义和使用,以在私有窗口类中发送消息。这些值不能用于定义在整个应用程序中有意义的消息,因为一些预定义的窗口类已经在此范围内定义了值。例如,预定义的控件类(如 BUTTON、EDIT、LISTBOX 和 COMBOBOX)可以使用这些值。此范围内的消息不应发送到其他应用程序,除非这些应用程序旨在交换消息并将相同的含义附加到消息编号。

第三个范围(0x8000 到 0xBFFF)中的消息编号可供应用程序用作私人消息。此范围内的消息与系统消息不冲突。

第四个范围(0xC000 到 0xFFFF)中的消息号是在运行时定义的,当应用程序调用 RegisterWindowMessage 函数来检索字符串的消息号时。注册相同字符串的所有应用程序都可以使用关联的消息号来交换消息。然而,实际的消息编号不是一个常数,不能假定在不同会话之间是相同的。

第五个范围内的消息号(大于0xFFFF)由系统保留。

WM_USER 是 0x0400。

所以,

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 2021-04-21
    • 2018-11-18
    • 2020-06-27
    • 2021-06-20
    • 2020-02-22
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多