노무현 대통령 배너
[wxWidgets] Step 11. 메뉴바 가속키(단축키) 설정

wxWidgets을 이용하여 메뉴바를 생성하고

추가한 다음 메뉴에 가속키(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

한번 보시고 답변 주셧으면 감사하겠습니다.
즐거운 하루 되세요~
Commented by ExSuperstar at 2009/08/16/ 15:56
룡왕// 방문해 주셔서 감사합니다. 출처만 밝혀주신다면 카페로 스크랩하든 뭘하든 상관없습니다. ㅎㅎ
Commented by 룡왕 at 2009/08/16/ 22:31
네 그럼 원문그대로 출처와 함께 퍼가도록 하겠습니다. ^^

Name   Email   Homepage