프로그래밍/wxWidgets
[wxWidgets] Text Control에서 시간과 날짜를 추가하기
JunkMam
2024. 2. 14. 00:00
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 |
이렇게 하면, 끝이 아니라 현재 커서에서 해당 문자열이 추가되는걸 확인이 가능하다.