问题标签 [window-messages]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
63 浏览

api - 为什么 WM_MOUSELEAVE 没有被解雇?

我创建了一个用户控件,并使用 Paul Catons 子类对其进行子类化。

  • WM_MOUSEMOVE 正在被解雇。

  • WM_MOUSELEAVE 不是。

为什么 WM_MOUSELEAVE 没有被解雇?

我已经看到人们在这样的 WM_MOUSEMOVE 事件中调用 TrackMouseEvent 以使 WM_MOUSELEAVE 触发的方法,但我不明白为什么需要强制执行它:

代码:

但我不明白为什么应该这样做,为什么只在 WM_MOUSEMOVE 而不是在用户控件初始化时。

谢谢!

用户控件的代码是这样的:

代码:

0 投票
0 回答
66 浏览

api - WM_MOUSELEAVE 有时会在编译时在另一个控件上的 WM_MOUSEMOVE 之后发生

以下是问题的简短摘要:

我将鼠标指针从控件 1 快速移动到控件 2。

在 IDE 中,顺序是这样的:

编译时,顺序是这样的(有时,但不总是):

以下是问题的完整描述:

我正在继承用户控件。

我处理 WM_MOUSEMOVE 和 WM_MOUSELEAVE。

当 WM_MOUSEMOVE 发生并且鼠标指针之前没有在控件上时,我将其检测为“Enter”。

然后我使用以下代码跟踪鼠标事件:

当 WM_MOUSELEAVE 发生时,我知道鼠标指针已经离开了控件。

它完美地工作:很好。

当我在控件内移动鼠标指针时,会发生“Enter”事件。当我将鼠标移到控件外时,会出现“离开”输入。

现在我用非常快速的鼠标移动再次尝试相同的操作,我将鼠标指针快速移入和失控。它工作得很好,不管我做得多快。Enter-Leave-Enter-Leave 顺序非常好:Enter-Leave-Enter-Leave 等。

现在我复制控件,使它们中的两个彼此相邻:

我迅速将鼠标指针从控件 1 移动到控件 2。

顺序仍然很好:进入-离开-进入-离开。

现在我编译项目并运行 exe:

我也这样做:我将鼠标指针从控件 1 快速移动到控件 2。

现在发生以下顺序:

我认为序列是固定的,而不是像这里可以观察到的那样“可变”。

我没有想到什么?令我困惑的是,它在 IDE 中按预期工作,但在编译时无法预测。

为了调试正在发生的事情,我尝试了 Spy++,但它只报告 WM_MOUSEMOVE,所以我不知道我现在还能尝试什么来确定消息泵是否以“正确”的顺序接收它,并且由于某种原因,它只是在我的应用程序中搞砸了。

感谢您的任何帮助。

0 投票
0 回答
10 浏览

drag-and-drop - 预投窗口消息?

Windows 问题:是否有窗口消息或其他通知机制会通知注册为拖放目标的程序窗口鼠标指针已作为拖动操作的一部分“携带礼物”进入其客户区?即我想知道在它发生之前可能会发生丢弃(为了显示一个工具提示,描述如果文件被丢弃会发生什么,就像文件资源管理器通知用户文件是否将被移动或将被复制)。

0 投票
1 回答
125 浏览

c - Win32 应用程序中的神秘窗口消息 0xc0e8

我正在用 C 编写一个 Win32 应用程序,并且一直在监视通过消息循环的窗口消息。我收到一条未知消息 0xc0e8,似乎找不到有关此特定消息的任何信息。据我了解,所有低于 0x400 (WM_USER) 的消息都由系统保留,所以我不明白如果我不发送任何自定义消息,为什么我会收到高于该整数的消息。

有谁知道这条消息以及它可能来自哪里?

0 投票
1 回答
64 浏览

c++ - 当窗口中的任何像素发生变化时,是否有 Windows 消息?

当窗口中的像素发生变化时,我正在尝试使用SetWindowsHookEx. 我可以成功接收 Windows 消息,但是在没有屏幕更新发生时调用了大多数消息,并且在一个像素上多次调用了一些消息。

我尝试听WM_PAINT, WM_NCPAINT, 和WM_ERASEBKGND,但由于某种原因,它们不会每次都触发 - 例如,在记事本中,当滚动条颜色发生变化时(例如,将光标悬停在它们上方)或更改文本时,它不会触发本身。

有人可以帮我解决这个问题吗?如果在窗口内更改像素时没有运行具体事件,是否有我可以在其上执行 switch-case 表达式的事件列表?