在窗口循环中,在窗口控件上获取鼠标移动比子类化更容易
easier way to get mouse movenment on window control IN WINDOW LOOP than subclassing
首先,是的,我读过其他文章(我喜欢你的"类似问题标题"窗口),我只是想知道是否有更好的方法。
问题:当使用效果或任何其他涉及跟踪的东西时,WinAPI似乎决定按钮、编辑以及所有其他常见控件不会将WM_MOUSEMOVE传递给其父句柄。例如,当用户在按钮上停留(实际移动)太久,并且无意中触发了事件时,就会出现这种情况。
最初的问题:如何解决?
答案1:子类。非常方便和安全,但也需要一些时间,所以现在跳过它。
答案2:TrackMouseEvent+"if conditioning"-->可能很慢,而且肯定会变得非常复杂。
NoGo:使用通知标志作为按钮的BS_notify不起作用,因为它们会影响鼠标点击和焦点。
问题:还有其他想法吗?Windows 7是否"秘密"引入了一个标志,或者一些程序员知道如何更容易地处理它?
注意:我不想惹恼别人。在添加不必要的代码之前,我只想问一下。
子类是迄今为止最简单的选择。如果你正在寻找一个更简单的选择,你找不到。如链接所示,只需极少量的代码就可以解决您的问题。如果您希望具有这样的功能,即父句柄确实将WM_MOUSEMOVE
消息传递到窗口层次结构中,只需将其子类化,然后在处理该消息时将参数转发到父句柄上。
然而,我有点不清楚你所说的是什么意思
例如-在按钮上停留(实际移动)太久,事件被无意触发。
例如:
LRESULT CALLBACK ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
switch (uMsg)
{
case WM_MOUSEMOVE:
SendMessage((HWND)dwRefData, uMsg, wParam, lParam);
}
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
这是假设您在dwRefData
下传入了父HWND
。
相关文章:
- 移动窗口库
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 有没有办法像动画一样移动控制台窗口?
- Qt将鼠标移动事件转移到新窗口
- 在鼠标按下时移动 SDL2 窗口的功能闪烁窗口并且移动速度不够快
- 实时移动GTK+窗口
- 基于人脸检测坐标的GTK+移动窗口
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- X11:移动窗口时获得通知
- 模型对话框移动到主窗口后面的Qt错误
- 如何将图像数据从搜索窗口中移动到本地存储器OpenCL
- OpenGL纹理闪烁/有时在窗口大小上移动
- 有没有更好的方法来移动窗口
- GLFW 不会检测到 GLFW 窗口外的鼠标移动
- SDL 窗口在移动时消失
- 防止触摸输入移动的鼠标光标在窗口上
- WM_SIZE和移动窗口
- 如何使用xlib观察任何窗口移动
- 单击窗口移动后的坐标
- 一旦我从Win32 DLL中获得HWND,我可以获得本机窗口的坐标(即使窗口移动)