이전에 저장 기능에서 파일 경로를 새로 불러오는 경우가 불편해서 뺏다면, 이번엔 다른 이름으로 저장해야되는 경우가 생길 수 있다.

 이걸 구현하기 위해서 메뉴를 추가해줘야한다.

wxMain.h

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

 

 

 이렇게 해서 ID을 추가하고,

 

Bind로 연결될 이벤트 핸들러 메소드를 선언해준다.
OnSaveAs을 wxMain.h에 추가해준다.

 

wxMain.h

1
2
3
    void OnOpen(wxCommandEvent& event);
    void OnSave(wxCommandEvent& event);
    void OnSaveAs(wxCommandEvent& event);
cs

 

 

이 후에 wxMain.cpp에서 메뉴를 추가하는 기능을 정의하며, 이벤트 핸들러를 정의 및 연결해줘야한다.

wxMain.cpp

1
2
3
4
5
6
7
8
    m_menuFile = new wxMenu;
    m_menuFile->Append(wxID_NEW, "&New\tCtrl-N""New a Notepad");
    m_menuFile->Append(ID_NEW_WINDOW, "&New Windows\tCtrl+Shift+N""Open a new window.");
    m_menuFile->Append(wxID_OPEN, "&Open\tCtrl-O""Open a file");
    m_menuFile->Append(wxID_SAVE, "&Save\tCtrl-S""Save the file");
    m_menuFile->Append(ID_SAVE_AS, "Save &As\tCtrl-A""Save the file");
    m_menuFile->AppendSeparator();
    m_menuFile->Append(ID_QUIT, "E&xit\tAlt-X""프로그램 종료");
cs

 

이렇게 메뉴를 추가한다.

 Append(ID_SAVE_AS, "Save &As\tCtrl-A", "Save the file");을 이용해서 메뉴를 추가해준다.

 

 이 후에 이벤트 핸들러를 연결해준다.

wxMain.cpp

1
2
3
    Bind(wxEVT_MENU, &MyFrame::OnOpen, this, wxID_OPEN);
    Bind(wxEVT_MENU, &MyFrame::OnSave, this, wxID_SAVE);
    Bind(wxEVT_MENU, &MyFrame::OnSaveAs, this, ID_SAVE_AS);
cs

 

Bind을 이용해서 설정해놓은 ID_SAVE_AS에 연결이 되었으니.

OnSaveAs라는 함수를 정의 해줘야한다.

wxMain.cpp

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
void MyFrame::OnSaveAs(wxCommandEvent& event)
{
    wxFileDialog saveFileDialog(this, _("Save TXT file"), """",
        "TXT files (*.txt)|*.txt", wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
 
    wxString saveAsFileName;
    wxString saveAsFilePath;
 
    switch (saveFileDialog.ShowModal()) {
    case wxID_OK: {
        saveAsFileName = saveFileDialog.GetFilename();
        saveAsFilePath = saveFileDialog.GetPath();
        break;
    }
    case wxID_CANCEL: {
        return;
    }
    }
 
    // 사용자가 선택한 파일 경로를 저장합니다.
    if (!m_textControl->SaveFile(saveAsFilePath))
    {
        wxMessageBox("Could not save the file!""Error", wxOK | wxICON_ERROR);
        return;
    }
 
    // 파일이 성공적으로 저장되었다면, 현재 파일 경로를 업데이트하고 타이틀을 설정합니다.
    m_currentFileName = saveAsFileName;
    m_currentFilePath = saveAsFilePath;
    wxString titleNames = m_currentFileName;
    SetTitle(titleNames + " - Notepad"); // 타이틀 업데이트
 
    // 상태 표시줄에 메시지를 표시합니다.
    SetStatusText("File saved successfully.");
}
 
cs

 

 이렇게 해서 메시지를 표시 및 적용할 수 있게 된다.

 

 

Posted by JunkMam
,