2012-11-29 45 views

回答

1

大部分是正確的。

某些鼠標事件轉到框架,如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); 
} 
2

鼠標事件向上傳播的窗口層次結構,因此,如果你的框架完全被其他窗口覆蓋,那麼它不會得到任何鼠標事件擺在首位,因此你不能趕上他們在那裏。

當然,您可以隨時使用Bind()wxFrame類的方法處理任何其他窗口中的任何事件。例如:

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

將允許你處理的鼠標移動事件發生在幀中的方法中的面板。

相關問題