是否可以在 wxFrame 中捕获鼠标事件
Is it possible to catch mouse events in wxFrame
我一直在搜索网络,并试图找出是否有可能在wxWidgets的实际wxFrame元素中捕获鼠标事件。各种消息来源说这是不可能的,wxPanel应该用于捕获事件,这是真的吗?
谢谢
鼠标事件不会在窗口层次结构中向上传播,因此如果您的框架完全被其他窗口覆盖,那么它首先不会获得任何鼠标事件,因此您无法在那里捕获它们。
当然,您始终可以使用 Bind()
在类wxFrame
方法中处理来自任何其他窗口的任何事件。例如:
MyFrame::MyFrame(...)
: wxFrame(...)
{
wxPanel* p = new wxPanel(this);
p->Bind(wxEVT_MOTION, &MyFrame::OnMouseMotion, this);
}
将允许您在帧方法中处理面板上发生的鼠标运动事件。
大部分是真的。
一些鼠标事件会转到帧,例如wxEVT_ENTER(或任何名称)。其他人则进入面板,例如wxEVT_RIGHT_UP。您可以将这些事件转发到帧。
绑定到面板和框架中的事件。
Bind(wxEVT_RIGHT_UP, &MyFrame::OnMouse, ptr_to_myframe);
Bind(wxEVT_RIGHT_UP, &MyPanel::OnMouse, ptr_to_panel);
然后(假设框架是面板的父级),
void MyPanel::OnMouse(wxMouseEvent &event) {
wxPostEvent(GetParent(), event);
}
如果面板滚动,您可能希望转发具有未滚动坐标的事件。
void MyScrolledPanel::OnMouse(wxMouseEvent &event) {
wxMouseEvent pevent(event);
CalcUnscrolledPosition(event.GetX(), event.GetY(), &pevent.m_x, &pevent.m_y);
wxPostEvent(GetParent(), pevent);
}
相关文章:
- 跟踪滚动条上的鼠标事件
- Qt-如何在Qt3DWindow上获取鼠标事件
- Qt:如何防止为平板电脑事件生成鼠标事件
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 通过鼠标事件传递数据
- 鼠标区域窃取QQuickItem的鼠标事件
- Windows Console API鼠标事件只是进入选择模式
- 无法跟踪鼠标事件 OpenCV
- Qt. 忽略小部件中的任何鼠标事件,而不是另一个小部件
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- Juce 鼠标事件不起作用
- 是否可以捕获全局鼠标事件
- 单击QCHART图的轴时捕获鼠标事件
- OpenCV 鼠标事件始终在鼠标滚动时接收事件 10 和 *flag* 0
- 鼠标事件选取器打开场景图
- 将鼠标事件发送到虚拟现实OpenGL场景中的QtQuick窗口
- 处理鼠标事件SFML
- 是否可以在 wxFrame 中捕获鼠标事件