我一直在寻找的网站,并试图找出是否有可能赶在wxWidgets的实际wxFrame元素的鼠标事件。 各种消息来源说,这是不可能的,wxPanels应该用来捕获事件,是真的吗?
谢谢
我一直在寻找的网站,并试图找出是否有可能赶在wxWidgets的实际wxFrame元素的鼠标事件。 各种消息来源说,这是不可能的,wxPanels应该用来捕获事件,是真的吗?
谢谢
鼠标事件不传播向上的窗口层次结构,因此,如果你的框架完全被其他窗口覆盖,那么它不会得到任何鼠标事件摆在首位,因此你不能抓住他们那里。
当然,你可以随时处理来自任何其他窗口中的任何事件的方法wxFrame
使用类Bind()
例如:
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);
}