[ wxWidgets - 3 ] 예제 분석

  • class MyApp : public wxApp

    • 어플리케이션 클래스에 대한 정의이다. 
    • wxWidget은 객체들을 wxOOO 와 같은 형태로 제공하고 있다.
    • 이것을 나의 프로그램에 가져다 쓰는 방법은 위의 정의코드처럼 
    • 상속을 통한 자식클래스를 만드는 것이다.

    • 버튼과같은 작은 객체들은 이런방법을 통하지 않아도 상관없으나
    • MyApp 이라는 클래스는 그 이름그대로 "내가지금 만드는 어플리케이션"
    • 이라는 의미가 있고, 별도의 기능( OnInit )을 정의해야하기 때문에
    • 자식 클래스를 만드는것이 당연한 것 같다.
    •  
    • 여기서 OnInit() 함수는 일반 C 프로그램에서 main()과 유사한 역할을 한다고 한다.
    • 프로그램을 시작했을때, 가장 먼저 실행된다는 것이다.
    •  
    • ** DECLARE_APP( MyApp ), IMPLEMENT_APP( MyApp ) 이라는 매크로를 
    • 통해 MyApp객체를 실제로 선언해주어야 한다.

  • class MyFrame : public wxFrame
  •  
    • wxFrame 이란 실제로 눈에 보이는 프로그램의 '창'이라고 보면 적절한데,
    • 알아본 결과 wxWindow 로부터 상속받아 내려오는 클래스임을 알 수 있었다.
    • 그냥 wxWindow를 사용하면 되지않나? 라는 생각이 들었으나
    • 실험을 해보진 못했고,귀찮아서 그냥 넘어간 부분이다. 언제한번 확인해둬야 겠다. 
    •  
    • 여기서 중요한것은, 클래스 내부에 정의된 함수들과 매크로이다.
      • public :
            MyFrame(const wxString &title);

            //Event Handlers
            void OnQuit( wxCommandEvent& event );
            void OnAbout( wxCommandEvent& event );

        private :
            //This Class Handles Events
            DECLARE_EVENT_TABLE();

    • 이 부분인데, 주석으로 처리된 Event Handlers 가 눈에 띈다.
    • 즉, OnQuit(..), OnAbout(..) 함수가 "이벤트 핸들러" 라는 것이다.

    • 여기서 이벤트 핸들러의 개념을 대략 잡고 갈 수 있는데,
    • 내가 이해하기로는 특정 이벤트( 마우스클릭과 같은 )가 발생하면
    • 실행되는 함수라는 것이다.
    •  
    • 즉, 저기보이는 OnQuit 함수는 Quit이라는 메뉴를 선택했을때 실행되는
    • 함수이고, OnAbout은 About 메뉴를 선택하면 실행되는 함수이다.
    •  
    • 그럼 이 " 이벤트 <-> 핸들러(함수) " 연결은 어떻게 만들어 주느냐하니
    • 아래와 같이 정의한 부분이 보인다.

    • BEGIN_EVENT_TABLE(MyFrame,wxFrame) 
          EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
          EVT_MENU(wxID_EXIT , MyFrame::OnQuit)
      END_EVENT_TABLE()

    • MyFrame 내부에서  DECLARE_EVENT_TABLE(); 로 선언된 이벤트 테이블을 
    • 정의하고 있음을 알 수 있다.
    • 이와같이 이벤트를 사용할 수 있는데, 이것은 가장 기본적인 사용법인듯 하고
    • 동적인 이벤트 사용법이나 자신만의 이벤트를 만들어 쓰는 심화된 이벤트의
    • 사용법들이 있다고 한다. 
    •  
    • 이것은 다음번에 공부하기로 하고, 오늘의 공부는 여기서 마친다.
    • 나머지 코드들은 그냥 읽어보면 객체를 생성하고 이름을 설정한다거나
    • 글자를 보여준다거나 하는 간단한 내용이어서 쉽게 이해할 수 있었으므로
    • 궂이 여기다 쓰진 않는다.

댓글