티스토리 뷰

Hello World 소스코드를 분석해봤습니다


헤더파일 먼저

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef __MAIN_H__
#define __MAIN_H__
 
//내용의 코드의 출처
//https://docs.wxwidgets.org/3.0/overview_helloworld.html
// wxWidgets "Hello world" Program
 
//미리컴파일된 헤더파일이 지원 안될경우 대비책
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
 
//제일 밑에다가 추가할것    메모리누수 자동검사기
//켜둘경우 실행시 늦게실행되서 잠시꺼둠
//#ifdef __WXMSW__
//#include <wx/msw/msvcrt.h>      // redefines the new() operator 
////아래 함수 추가안해줘도 됩니다
////_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//#endif
 
namespace wxPrototype
{
    //wxApp클래스를 상속받은뒤에 OnInit()을 실행 시킬수있다
    class MyApp : public wxApp
    {
    public:
        virtual bool OnInit();
    };
 
    //윈도우 창은 wxFrame을 상속받아서 생성함    
    class MyFrame : public wxFrame
    {
    public:
        //wxFrame생성자에다가 메뉴, 상태창을 정해줄수있다.
        MyFrame(wxString&& title, wxPoint&& pos, wxSize&& size);
 
        //클래스가 사용자의 입력(event)에 대응하게 만들고싶다면
        //event매크로를 이용한 이벤트 테이블을 만들어야한다.
    private:
        //아래는 보는바와 같이 3개의 이벤트 핸들러들이 선언 되어있다.
        //OnExit 와 OnAbout 이벤트 핸들러들은 wxWidget에서 특별하게 관리한다
        void OnHello(wxCommandEvent& event);
        void OnExit(wxCommandEvent& event);
        void OnAbout(wxCommandEvent& event);
 
        //이벤트 테이블을 만들어준다
        wxDECLARE_EVENT_TABLE();
    };
 
    //메뉴의 명령에 반응하기위해서 이넘문으로
    //각각의 핸들러에게 고유의 아이디를 정해준다
    //OnExit() 핸들러와 OnAbout 핸들러는
    //이미 wxWidgets 내부에 고유한 아이디가 정의되어 있다.
    enum class wxID
    {
        Hello = 1
    };
}
#endif
 
cs


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//미리컴파일된 헤더파일
#include "stdafx.hpp"
 
#include "main.hpp"
 
namespace wxPrototype
{
    //main 함수가 정의되어있고 프로그램만들고 실행한다
    wxIMPLEMENT_APP(wxPrototype::MyApp);
 
    //OnInit()은 프로그램이 실행될때 불려지게 된다.
    bool MyApp::OnInit()
    {
        //_CrtSetBreakAlloc();
 
        //MyFrame(윈도우창)을 동적 생성하고 생성자에 타이틀, 위치,크기가 인자로 넘어간다
        MyFrame *frame{ new MyFrame{ "Hello World", wxPoint{5050}, wxSize{450340}} };
        //아무값도 할당 안되면 실패
        if (!frame)    return false;
        //프레임을 보여이게 한다
        frame->Show(true);
        return true;
    }
 
    //MyFrame의 생성자를 호출하면서 부모생정자를 호출해서 초기화한다
    //첫번째 인자 부모윈도우창의 메모리주소
    //두번째 인자 고유아이디값 wxID_ANY로 할경우 상관없다는 뜻
    //세번째 타이틀, 네번째 위치 다섯번째 크기
    MyFrame::MyFrame(wxString&& title, wxPoint&& pos, wxSize&& size)
        : wxFrame(NULL, wxID_ANY, title, pos, size)
    {
        //자식생성자에서 메뉴를 생성중
        wxMenu *menuFile{ new wxMenu };
        //Apeend 함수로 메뉴 항목을 추가합니다
        //첫번째 인자로 이벤트 핸들러의 주소가 넘어가고
        //두번째 인자로 메뉴 항목의 이름
        //세번째 인자로 아래쪽 상태창에서 나타날 문자입니다
        menuFile->Append(static_cast<int>(wxID::Hello), "&Hello...\tCtrl-H",
            "Help string shown in status bar for this menu item");
        //메뉴항목사이에 줄을 그어줍니다
        menuFile->AppendSeparator();
        //EXIT 메뉴항목입니다 이부분은 자동으로 나머지가 설정됩니다.
        menuFile->Append(wxID_EXIT);
 
        //새로운 메뉴를 추가합니다
        wxMenu *menuHelp{ new wxMenu };
        //이벤트 핸들러 주소 할당
        menuHelp->Append(wxID_ABOUT);
 
        //메뉴 바를 만듭니다
        wxMenuBar *menuBar{ new wxMenuBar };
        //메뉴바에다가 메뉴항목을 추가합니다
        //첫번째 인자에 메뉴바의 주소, 두번째에 메뉴바의 이름이 들어갑니다.
        menuBar->Append(menuFile, "&File");
        menuBar->Append(menuHelp, "&Help");
 
        //메뉴바를 프레임에 등록해줍니다
        SetMenuBar(menuBar);
 
        //상태창을 생성합니다.
        CreateStatusBar();
        //생성창의 기본적으로 나타날 값
        SetStatusText("Welcome to wxWidgets!");
    }
 
    //이벤트 핸들러들의 구현부들
    void MyFrame::OnHello(wxCommandEvent& event)
    {
        //로그 메세지가뜸
        wxLogMessage("Hello world from wxWidgets!");
    }
    void MyFrame::OnExit(wxCommandEvent& event)
    {
        //종료
        Close(true);
    }
    void MyFrame::OnAbout(wxCommandEvent& event)
    {
        //첫번째 인자로 메세지박스의 내용
        //두번째 인자로 메세지 박스의 타이틀
        //세번째인자 아이콘선택
        wxMessageBox("This is a wxWidgets' Hello world sample",
            "About Hello World", wxOK | wxICON_INFORMATION);
    }
 
    //이벤트 테이블을 만들어준다,
    //자식 Frame 클래스와 부모 wxFrame을 인자로 넘겨준다
    wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
    //각각의 이벤트 헨들러들에게 아이디를 할당한다
    //아이디 값과, 함수의 주소를 넘겨준다
    EVT_MENU(static_cast<int>(wxID::Hello), MyFrame::OnHello)
    EVT_MENU(wxID_EXIT, MyFrame::OnExit)
    EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
    wxEND_EVENT_TABLE()
}
 
cs


미리컴파일된 헤더파일은 

#include <wx/wxprec.h>

파일을 포함하고 있습니다.


아래는 잘실행된 모습


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함