NotePad에서 [편집] > [시간/날짜]를 누르면, 메모장에서 시간과 날짜가 추가되는 기능이 있는데.

 그것을 wxWidgets에서 구현하고자한다.

 

 [Edit] > [DateTime] 이런식의 메뉴를 추가하기 위해서 메뉴 정보를 열거형으로 선언한다.

 

 wxMain.h에는 다음과 같이 수정해준다.

1
2
3
4
5
6
7
8
9
10
enum
{
    ID_QUIT,
    ID_SAVE_AS,
    ID_DATETIME,
    ID_WordWarp,
    ID_FontSetting,
    ID_StatusBar,
};
 
cs

 

메뉴바에서 메뉴를 추가하기 위해서 wxMenu 변수를 추가한다.

wxMenu에서 wxMenu* m_menuEdit을 추가한다.

1
2
3
4
5
6
    // 메뉴바 및 메뉴 변수.
    wxMenuBar* m_menuBar;
    wxMenu* m_menuFile;
    wxMenu* m_menuEdit;
    wxMenu* m_menuFormat;
    wxMenu* m_menuView;
cs

 

메뉴가 추가되었으니.

메뉴를 클릭했을때, 동작시키는 이벤트 핸들러를 추가해준다.

OnInsertDateTime(wxCommandEvent& event)을 추가해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // File 메뉴에 적용할 이벤트 핸들러
    void OnNew(wxCommandEvent& event);
    void OnNewWindow(wxCommandEvent& event);
    void OnOpen(wxCommandEvent& event);
    void OnSave(wxCommandEvent& event);
    void OnSaveAs(wxCommandEvent& event);
    void OnButtonClick(wxCommandEvent& event);
 
    // Edit 메뉴에 적용할 이벤트 핸들러
    void OnInsertDateTime(wxCommandEvent& event);
 
    // Format 메뉴에 적용할 이벤트 핸들러
    void OnToggleWordWrap(wxCommandEvent& event);
    void OnFontSetting(wxCommandEvent& event);
 
    // View 메뉴에 적용할 이벤트 핸들러
    void OnToggleStatusBar(wxCommandEvent& event);
 
    // 이벤트를 받기 위한 메소드
    void OnMyCustomEvent(MyCustomEvent& event);
cs

 

이렇게 wxMain.h로 선언을 제대로 완료했으면, wxMain.cpp에서 선언으로 추가한 코드들을 구현해주자.

 

 wxMain.cpp 에서 Bind로 메뉴에 이벤트 핸들러랑 연결하도록 한다.

1
2
    // 메뉴 Edit에 관련된 이벤트 핸들러
    Bind(wxEVT_MENU, &MyFrame::OnInsertDateTime, this, ID_DATETIME);
cs

 

 이렇게 한 후에 OnInsertDateTime을 구현한다.

1
2
3
4
5
6
7
8
9
void MyFrame::OnInsertDateTime(wxCommandEvent& event) {
    // 현재 날짜와 시간을 가져옴.
    wxDateTime now = wxDateTime::Now();
    // 현재 날짜와 시간을 기본 형식으로 문자열로 변환.
    wxString dateTimeStr = now.Format();
 
    // 현재 텍스트 컨트롤에 날짜와 시간의 문자열을 삽입함.
    m_textControl->AppendText(dateTimeStr);
}
cs

 

 

textControl에서 AppendText을 이용하면, 마지막에 현재 날짜와 시간의 문자열로 삽입하게 된다.

 

현재 위치의 커서에서 출력하도록 할려면, 다음과 같이 수정해야된다.

1
2
3
4
5
6
7
8
9
 
void MyFrame::OnInsertDateTime(wxCommandEvent& event) {
    // 현재 날짜와 시간을 가져옴.
    wxDateTime now = wxDateTime::Now();
    // 현재 날짜와 시간을 기본 형식으로 문자열로 변환.
    wxString dateTimeStr = now.Format();
 
    m_textControl->WriteText(dateTimeStr);
}
cs

 

이렇게 하면, 끝이 아니라 현재 커서에서 해당 문자열이 추가되는걸 확인이 가능하다.

 

 

 

 

 

 

 

 

Posted by JunkMam
,