티스토리 뷰
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{50, 50}, wxSize{450, 340}} }; //아무값도 할당 안되면 실패 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>
파일을 포함하고 있습니다.
아래는 잘실행된 모습
'wxWidgets with VS 2017 > 3.0.4 Stable Relase' 카테고리의 다른 글
wxWidgets VS2017 기준 설치 세부사항 (0) | 2018.11.24 |
---|---|
wxWidgets po파일 로딩해서 다국적 프로그램 만들기 (0) | 2018.11.23 |
wxWidgets 비주얼 스튜디오 2017에서 설치하고 창띄우기 (0) | 2018.11.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- .editorconfig
- scss slider
- _Generic()
- #C
- responsive slider
- C11
- JS
- xgettext
- 오류
- Visual Studio 2017
- CSS
- CSS 슬라이더
- C
- slider
- css slider
- #비주얼스튜디오
- SCSS @for
- fyling fly
- dropdown list
- scanf()
- wxWidgets
- flying bee
- stdarg.h
- Generic()
- 도매인 가격비교
- gettext
- HTML
- 1000 자리 계산기
- 도메인 가격비교
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함