Hi i am trying to see how event.Skip() work. But when i use it on wxEVT_LEFT_UP then it is not working. Below are the files/code that i have.
main.h
class MyApp : public wxApp
{
  public:
    virtual bool OnInit();
};
main.cpp
bool MyApp::OnInit()
{
    MyFrame *prop = new MyFrame(wxT("MyFrame"));
    prop->Show(true);
    return true;
}
myframe.h
class MyFrame : public wxFrame
{
public:
  MyFrame(const wxString& title);
  
  void OnClick(wxMouseEvent& event);
};
myframe.cpp
MyFrame::MyFrame(const wxString& title)
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 130))
{
  MyPanel *panel = new MyPanel(this, wxID_ANY);
  panel->SetBackgroundColour(wxColour(255,255,255));
  MyButton *button = new MyButton(panel, wxID_ANY, wxT("Ok"));
  Connect( wxEVT_LEFT_UP, 
      wxMouseEventHandler(MyFrame::OnClick));
  panel->Centre();
}
void MyFrame::OnClick(wxMouseEvent& event) 
{
  std::cout << "event reached frame class" << std::endl;
  event.Skip();
}
mypanel.h
class MyPanel : public wxPanel
{
public: 
  MyPanel(wxFrame *frame, int id);
  void OnClick(wxMouseEvent& event);
};
mypanel.cpp
MyPanel::MyPanel(wxFrame *frame, int id)
    : wxPanel(frame, id)
{
  Connect( wxEVT_LEFT_UP, 
      wxMouseEventHandler(MyPanel::OnClick));
} 
void MyPanel::OnClick(wxMouseEvent& event) 
{
  std::cout << "event reached panel class" << std::endl;
  event.Skip();
}
mybutton.h
class MyButton : public wxPanel
{
public:
  MyButton(wxPanel *panel, int id, const wxString &label);
  void OnClick(wxMouseEvent& event);
};
mybutton.cpp
class MyButton : public wxPanel
{
public:
  MyButton(wxPanel *panel, int id, const wxString &label);
  void OnClick(wxMouseEvent& event);
};
Now when i click on MyButton(red in colour) on the screen then its corresponding event handler onClick() is called but inside that there is a statement event.Skip(). which should call its parent(MyPanel in this case) event handler which is not happening. What i want is that when the user clicks on the MyButton then in addition to MyButton's onClick() event handler, MyPanel's event handler and MyFrame's event handler should also be called/execute. How can i acheive this? Why is this not happening here while if i use wxEVT_COMMAND_BUTTON_CLICKED and wxCommandEventHandler then the same code works.
Aucun commentaire:
Enregistrer un commentaire