wxCommandEvent와 중요 클래스


wxObject 클래스는 모든 wxWidgets 클래스들의 최상위 부모 클래스입니다. 참조 기반으로 객체를 관리할 수 있으며 메모리 생성 및 소멸에 사용되는 operator new와 operator delete 구현함으로써 정적 방식이든, 동적 방식이든 메모리 생성 및 소거에 따른 문제가 발생하지 않도록 설계되었습니다.

wxEvtHandler 클래스는 이벤트를 핸들링하는 클래스입니다. 이벤트를 발생시키거나 이벤트 핸들러를 호출하는 일련의 과정을 구현하고 있습니다. 따라서 wxWidgets 라이브러리의 이벤트 시스템을 사용하고 싶다면 필히 wxEvtHandler 클래스로부터 파생되어야 합니다.

wxWindow 클래스는 가시성을 담당하는 클래스로 모니터상에 시각적으로 표시되는 모든 요소들은 모두 wxWindow 클래스로부터 파생되어야 합니다.

wxPanel 클래스는 wxControl 클래스로부터 파생된 클래스를 레이어할 목적으로 설계된 컨테이터 윈도우입니다.

wxApp 클래스는 Top Level Window에 대한 목록을 보관하고 있으며, 모든 Top Level Window가 종료되면 실행이 중지됩니다.

wxButton 클래스나 wxMenu 클래스에서 발생한 이벤트는 대부분 직접 이벤트 핸들링에 대한 처리를 하지 않습니다.(원한다면 그렇게 할수도 있지만)

이벤트는 발생하지만 이벤트에 대한 처리를 부모 윈도우에 맡기도록 wxCommandEvent 형태로 이벤트를 전달하도록 기반 클래스인 wxEvtHandler에 구현되어 있습니다.

이벤트 테이블은 DECLARE_EVENT_TABLE()이라고 헤더 파일에 적어주고

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
END_EVENT_TABLE()

을 cpp 파일에 적어주고 세부적인 이벤트를 등록해주면 됩니다. 이벤트 테이블은 wxEvtHandler 클래스로부터 파생된 클래스에서만 의미를 가집니다.

MyFrame.h
#pragma  once

#include  <wx/wx.h>
class  MyFrame:public  wxFrame
{
   enum{
      ID_QUIT=1,
      ID_HELP,
   };
public:
    MyFrame(const  wxString& title);
    ~MyFrame(void);

private:
   void OnQuit(wxCommandEvent& event);

   DECLARE_EVENT_TABLE()
};

MyFrame.cpp
#include  "MyFrame.h"
#include  <wx/button.h>

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
   EVT_MENU(ID_QUIT,MyFrame::OnQuit)
   EVT_BUTTON(ID_QUIT,MyFrame::OnQuit)
END_EVENT_TABLE()



MyFrame::MyFrame(const  wxString& title)
    :wxFrame(NULL, wxID_ANY,title)
{

   wxMenu* menufile = new  wxMenu;
    menufile->Append(ID_QUIT,"&Quit\tCTRL+Q");
    menufile->Append(ID_HELP,"&Help\tCTRL+H");

   wxMenuBar* menuBar = new  wxMenuBar;
    menuBar->Append(menufile,"&File");
   this->SetMenuBar(menuBar);


   wxPanel* panel = new  wxPanel(this);
   wxButton* btn = new  wxButton(panel,ID_QUIT,"&Quit",wxPoint(100,100));

}


MyFrame::~MyFrame(void)
{
}


void 
MyFrame::OnQuit(wxCommandEvent& event){
   this->Close();
}

MyApp.h
#pragma  once

#include  <wx/wx.h>
class MyApp:public wxApp
{
public:
    MyApp(void);
    ~MyApp(void);

   virtual  bool OnInit();

};


DECLARE_APP(MyApp);

MyApp.cpp
#include  "MyApp.h"
#include  "MyFrame.h"

IMPLEMENT_APP(MyApp);

MyApp::MyApp(void)
{
}


MyApp::~MyApp(void)
{
}

bool
MyApp:: OnInit(){
   wxFrame* m = new  MyFrame("Hello Button");
    m->Show(true);

   return  true;
}

- 목록:

3 thoughts on “wxPaintDC 이해하기

  1. 공유해주신 동영상에서 많은 것을 배우고 있습니다. 감사합니다.
    윈도우에서 GUI 프로그래밍을 가끔 하지만, RAD 툴에서 만들어주는 코드를 약간 변형하는 정도입니다.
    동영상을 보다보니, 툴이 생성해주는 코드들에 대해 좀 더 이해할 수 있을 것 같습니다.
    wxSmith 를 이용하여 wxWidget 를 사용하려 알아보는 중인데, 설명을 들으니 wxSmith 나 wxFormWBuilder 가 해주는 일을 약간은 이해할 수 있게 된 것 같습니다. 해당 툴을 사용하는데 많은 도움이 될 것 같습니다.
    좋은 강좌에 감사드립니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>