是否有可能赶上wxFrame鼠标事件(Is it possible to catch mouse e

2019-09-30 05:24发布

我一直在寻找的网站,并试图找出是否有可能赶在wxWidgets的实际wxFrame元素的鼠标事件。 各种消息来源说,这是不可能的,wxPanels应该用来捕获事件,是真的吗?

谢谢

Answer 1:

鼠标事件传播向上的窗口层次结构,因此,如果你的框架完全被其他窗口覆盖,那么它不会得到任何鼠标事件摆在首位,因此你不能抓住他们那里。

当然,你可以随时处理来自任何其他窗口中的任何事件的方法wxFrame使用类Bind() 例如:

MyFrame::MyFrame(...)
    : wxFrame(...)
{
    wxPanel* p = new wxPanel(this);
    p->Bind(wxEVT_MOTION, &MyFrame::OnMouseMotion, this);
}

将使你处理鼠标移动事件发生在上一帧方法的面板。



Answer 2:

通常的情况。

有些鼠标事件去框,如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); 
}


文章来源: Is it possible to catch mouse events in wxFrame