Winapi 如何调试队列上的消息,谁发送消息?排队的是什么?

Winapi 如何调试队列上的消息,谁发送消息?排队的是什么?,winapi,Winapi,事件队列是一个获取消息并对其进行处理的框 请问,PostMessage和SendMessage存储的邮件在哪里?如何辨别谁发送了什么信息? 可以检查哪些变量以获取信息 消息存储在哪里 它们存储在与线程关联的内部数据结构中。请注意,每个线程都有零个或一个消息队列。消息队列不是为线程自动创建的,而是在线程调用需要消息队列的函数时按需创建的 还请注意,已发送的消息,SendMessage传递的消息不会显示在队列中。发送的消息是同步的,因此不排队 如何判断谁发送了什么消息 一般来说,这是不可能的: 可以

事件队列是一个获取消息并对其进行处理的框

请问,PostMessage和SendMessage存储的邮件在哪里?如何辨别谁发送了什么信息? 可以检查哪些变量以获取信息

消息存储在哪里

它们存储在与线程关联的内部数据结构中。请注意,每个线程都有零个或一个消息队列。消息队列不是为线程自动创建的,而是在线程调用需要消息队列的函数时按需创建的

还请注意,已发送的消息,
SendMessage
传递的消息不会显示在队列中。发送的消息是同步的,因此不排队

如何判断谁发送了什么消息

一般来说,这是不可能的:

可以检查哪些变量以获取信息


你不能。您可以使用
peek消息
查找队列是否包含特定消息,或者查找给定范围内的第一条消息。但是没有转储整个消息队列的功能

我将其重新标记为winapi问题,因为它不是特定于任何特定语言的。此问题是否与您最近提出的、现在已删除的问题有关,您在该问题中询问如何将子窗口设置为最顶部?是的,是的。我需要找到为什么同一个组件在一个窗口中向队列发送消息,而不在另一个窗口中发送消息。我将尝试查看队列,看看是否可以找到该消息。它是一个弹出窗口,用于刷新数据,如uesr类型。比方说它的悬停数据。
WS_CHILD
WS_POPUP
是相互排斥的(请参阅)。如果您对术语感到困惑,请参阅以获取介绍。好的,这就是问题所在
WM_DRAWITEM
被发送到窗口的父级。您的窗口没有父窗口。如果想要所有者绘制列表框,则需要创建一个窗口作为父窗口。发送消息的小更正:跨线程发送的消息实际上存储在队列中,并在调用其中一个消息检索函数时进行调度,在该消息检索函数返回第一条排队消息之前。@IInspectable我认为这是一个实现细节。他们没有排队,因为我的意思是没有排队的消息。它们是同步的。重要的一点是,跨线程发送的消息不会直接调用窗口过程(上下文中发送的消息就是这样)。这不仅仅是一个实现细节,因为它会对代码产生影响。也就是说,接收线程必须调用消息检索函数,以便跨线程发送的消息被调度。由此推论,窗口过程不需要防止多线程访问。@IInspectable我知道所有这些。但我认为询问者询问的是消息队列。