프로그래밍/wxWidgets
[wxWidgets] 다시 실행(Redo) 기능 구현하기.
JunkMam
2024. 2. 15. 12:00
wxWidgets의 textCtrl에 실행 취소(Undo)와 같이 다시 실행(Redo)가 존재한다.
이걸 이용해서 구현이 가능하다.
Redo를 하기 위한 이벤트 핸들러를 추가하자.
wxMain.h
1
2
3
4
5
|
// Edit 메뉴에 적용할 이벤트 핸들러
void OnUndo(wxCommandEvent& event);
void OnRedo(wxCommandEvent& event);
void OnSelectAll(wxCommandEvent& event);
void OnInsertDateTime(wxCommandEvent& event);
|
cs |
Undo와 같이 Redo가 가능할 경우에 활성화를 할수 있게. 선언하자.
wxMain.h
1
2
3
|
// 메뉴 동적 활성화 하기 위한 이벤트 핸들러
void OnUpdateUndo(wxUpdateUIEvent& event);
void OnUpdateRedo(wxUpdateUIEvent& event);
|
cs |
이제 wxMain.cpp에 작업을 하자.
먼저 메뉴를 추가하자.
wxMain.cpp
1
2
3
4
5
6
7
|
m_menuEdit = new wxMenu;
m_menuEdit->Append(wxID_UNDO, "&Undo\tCtrl+Z", "Undo the last action");
m_menuEdit->Append(wxID_REDO, "&Redo\tCtrl+Y", "Redo the last undone action");
m_menuFile->AppendSeparator();
m_menuEdit->Append(ID_SELECT_ALL, "&Select All\tCtrl+A", "Select all text");
m_menuFile->AppendSeparator();
m_menuEdit->AppendCheckItem(ID_DATETIME, "&DateTime\tF5", "DateTime");
|
cs |
정의 및 이벤트 핸들러를 연결한다.
wxMain.cpp
1
2
3
4
5
6
7
8
9
10
|
// 메뉴 Edit에 관련된 이벤트 핸들러
Bind(wxEVT_MENU, &MyFrame::OnUndo, this, wxID_UNDO);
Bind(wxEVT_MENU, &MyFrame::OnRedo, this, wxID_REDO);
Bind(wxEVT_MENU, &MyFrame::OnInsertDateTime, this, ID_DATETIME);
Bind(wxEVT_MENU, &MyFrame::OnSelectAll, this, ID_DATETIME);
// 메뉴바 갱신 이벤트 핸들러
Bind(wxEVT_UPDATE_UI, &MyFrame::OnUpdateUndo, this, wxID_UNDO);
Bind(wxEVT_UPDATE_UI, &MyFrame::OnUpdateRedo, this, wxID_REDO);
|
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
|
void MyFrame::OnUndo(wxCommandEvent& event) {
if (m_textControl->CanUndo()) {
m_textControl->Undo();
}
}
void MyFrame::OnRedo(wxCommandEvent& event)
{
if (m_textControl->CanRedo())
{
m_textControl->Redo();
}
}
// 메뉴바 갱신 이벤트 핸들러
void MyFrame::OnUpdateUndo(wxUpdateUIEvent& event)
{
event.Enable(m_textControl->CanUndo());
}
// 메뉴바 갱신 이벤트 핸들러
void MyFrame::OnUpdateRedo(wxUpdateUIEvent& event)
{
event.Enable(m_textControl->CanRedo());
}
|
cs |
이렇게하면, 다시 시작을 구현할 수 있다.