[wxWidgets] Step 11. 메뉴바 가속키(단축키) 설정
wxWidgets을 이용하여 메뉴바를 생성하고
추가한 다음 메뉴에 가속키(Accelerator Key),
즉 단축키를 설정하고 단축키로 하여금 이벤트를
발생시켜서 해당 핸들러를 수행하도록 하는 예제
프로그램입니다.
개발환경
Gentoo Linux 2.6.29-r5
gcc 4.3.3
wxGTK 2.8.10
mainframe.h
mainframe.cpp
main.h
main.cpp
추가한 다음 메뉴에 가속키(Accelerator Key),
즉 단축키를 설정하고 단축키로 하여금 이벤트를
발생시켜서 해당 핸들러를 수행하도록 하는 예제
프로그램입니다.
개발환경
Gentoo Linux 2.6.29-r5
gcc 4.3.3
wxGTK 2.8.10
mainframe.h
#ifndef _MAINFRAME_H_
#define _MAINFRAME_H_
#include<wx/wx.h>
#include<wx/string.h>
#include<wx/menu.h>
const int ID_SUB1 = 100;
const int ID_SUB2 = 101;
const int ID_SUB3 = 102;
class Mainframe : public wxFrame
{
private:
wxMenuBar *menu_bar;
wxMenu *menu;
public:
Mainframe(const wxString& title);
void OnSelectSub1(wxCommandEvent &event);
void OnSelectSub2(wxCommandEvent &event);
void OnSelectSub3(wxCommandEvent &event);
void OnQuit(wxCommandEvent &event);
};
#endif // _MAINFRAME_H_mainframe.cpp
#include "mainframe.h"
Mainframe::Mainframe(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(300, 100))
{
//메뉴바 생성
menu_bar = new wxMenuBar;
//"File" 메뉴 생성
menu = new wxMenu;
//"File" 메뉴에 Sub 메뉴 추가
//ID_SUB1 메뉴에 Ctrl+C 단축키 설정
menu->Append(ID_SUB1, wxT("sub item 1 \tCtrl+C"));
//ID_SUB2 메뉴에 Ctrl+D 단축키 설정
menu->Append(ID_SUB2, wxT("sub item 2 \tCtrl+D"));
//ID_SUB3 메뉴에 Ctrl+E 단축키 설정
menu->Append(ID_SUB3, wxT("sub item 3 \tCtrl+E"));
//Sub 메뉴에 선택시 호출되어질 이벤트 핸들러 등록
Connect(ID_SUB1, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Mainframe::OnSelectSub1));
Connect(ID_SUB2, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Mainframe::OnSelectSub2));
Connect(ID_SUB3, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Mainframe::OnSelectSub3));
//구분자 추가
menu->AppendSeparator();
menu->Append(wxID_EXIT, wxT("&Quit"));
Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(Mainframe::OnQuit));
//메뉴바에 "File" 메뉴 추가
menu_bar->Append(menu, wxT("&File"));
//메뉴바 등록
SetMenuBar(menu_bar);
this->Centre();
}
void Mainframe::OnSelectSub1(wxCommandEvent &WXUNUSED(event))
{
wxString str = wxGetTextFromUser(wxT("Ctrl+C :"));
if(str.Len() > 0)
{
wxPuts(str);
}
}
void Mainframe::OnSelectSub2(wxCommandEvent &WXUNUSED(event))
{
wxString str = wxGetTextFromUser(wxT("Ctrl+D :"));
if(str.Len() > 0)
{
wxPuts(str);
}
}
void Mainframe::OnSelectSub3(wxCommandEvent &WXUNUSED(event))
{
wxString str = wxGetTextFromUser(wxT("Ctrl+E :"));
if(str.Len() > 0)
{
wxPuts(str);
}
}
void Mainframe::OnQuit(wxCommandEvent &WXUNUSED(event))
{
wxPuts(wxT("Exit!"));
Close(true);
}main.h
#ifndef __MAIN_H_
#define __MAIN_H_
#include<wx/wx.h>
class FirstApp : public wxApp
{
public:
virtual bool OnInit();
};
#endif // __MAIN_H_main.cpp
#include "main.h"
#include "mainframe.h"
IMPLEMENT_APP(FirstApp)
bool FirstApp::OnInit()
{
Mainframe *main = new Mainframe(wxT("wxWidgets Example 11"));
main->Show(true);
return true;
}Posted by ExSuperstar
Track this back : http://exsuperstar.net/trackback.php?blogid=382
Commented by
룡왕
at 2009/08/16/ 07:03
안녕하세요. 네이버에 wxWidgets 관련 카페를 개설한 사람입니다.
wxWidgets는 정보도 적고, 그다지 교류가 활성화가 되지 않아서
정보를 이 카페로 모으려고 하고 있습니다.
관련 글을 올리고 계시는데 폐가 안된다면 카폐로 스크랩하고 싶습니다.
카폐 주소입니다.
http://cafe.naver.com/wxwidgetprg
한번 보시고 답변 주셧으면 감사하겠습니다.
즐거운 하루 되세요~
wxWidgets는 정보도 적고, 그다지 교류가 활성화가 되지 않아서
정보를 이 카페로 모으려고 하고 있습니다.
관련 글을 올리고 계시는데 폐가 안된다면 카폐로 스크랩하고 싶습니다.
카폐 주소입니다.
http://cafe.naver.com/wxwidgetprg
한번 보시고 답변 주셧으면 감사하겠습니다.
즐거운 하루 되세요~
Commented by
ExSuperstar
at 2009/08/16/ 15:56
룡왕// 방문해 주셔서 감사합니다. 출처만 밝혀주신다면 카페로 스크랩하든 뭘하든 상관없습니다. ㅎㅎ
Commented by
룡왕
at 2009/08/16/ 22:31
네 그럼 원문그대로 출처와 함께 퍼가도록 하겠습니다. ^^





