Руководство по программированию с wxWidgets (3. Меню и панели инструментов).

Jan Bodnar, “The wxWidgets programming tutorial (3. Menus and Toolbars).”, public translation into Russian from English More about this translation.

Translate into another language.

Меню и панели инструментов

Строка меню

Строка меню одна из самых заметных частей интерфейса программы. Это группа команд, расположенных в различных подменю. Если в консоли Вы должны запоминать множество различных команд, здесь же большинство команд сгруппированы в логические части. Есть принятые стандарты, которые уменьшают количество времени, нужное для изучения нового приложения. Чтобы реализовать строку меню в wxWidgets, нам понадобится три вещи: wxMenuBar, wxMenu и wxMenuItem.

Строка меню

Figure: Menubar

Простой пример меню

Создать новую строку меню в wxWidgets очень просто. Всего лишь несколько строк кода.

menu.h

#include <wx/wx.h>

#include <wx/menu.h>

class SimpleMenu : public wxFrame

{

public:

SimpleMenu(const wxString& title);

void OnQuit(wxCommandEvent& event);

wxMenuBar *menubar;

wxMenu *file;

};

menu.cpp

#include "menu.h"

SimpleMenu::SimpleMenu(const wxString& title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))

{

menubar = new wxMenuBar;

file = new wxMenu;

file->Append(wxID_EXIT, wxT("&Quit"));

menubar->Append(file, wxT("&File"));

SetMenuBar(menubar);

Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,

wxCommandEventHandler(SimpleMenu::OnQuit));

Centre();

}

void SimpleMenu::OnQuit(wxCommandEvent& WXUNUSED(event))

{

Close(true);

}

main.h

#include <wx/wx.h>

class MyApp : public wxApp

{

public:

virtual bool OnInit();

};

main.cpp

#include "main.h"

#include "menu.h"

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()

{

SimpleMenu *menu = new SimpleMenu(wxT("Simple Menu"));

menu->Show(true);

return true;

}

menubar = new wxMenuBar;

Сначала создаем объект строки меню.

file = new wxMenu;

Далее создаем объект меню.

file->Append(wxID_EXIT, wxT("&Quit"));

Мы добавляем элемент меню в объект меню. Первый параметр - это id элемента меню. Второй - имя элемента меню. Здесь мы не создаём wxMenuItem явно. Он создаётся методом Append() тайно. Позже мы создадим wxMenuItem вручную.

menubar->Append(file, wxT("&File"));

SetMenuBar(menubar);

После этого мы добавляем меню в строку меню. Символ & задаёт горячую клавишу. Символ, идущий за & подчёркивается. Теперь меню доступно через сочетание клавиш alt+"подчёркнутый символ" (в данном случае это сочетание alt+F). И в завершении мы вызываем метод SetMenuBar(). Это метод принадлежит виджету wxFrame. Он устанавливает строку меню.

Simle menu example

Figure: Simple menu example

Подменю.

Каждое меню может иметь подменю. Это позволяет группировать сходные команды в соответствующие группы. Например, мы можем поместить команды которые скрывают/показывают различные панели инструментов, таких как персональная панель, адресная панель, панель статуса или навигационная панель, в подменю "панели". В меню мы можем разделить команды при помощи разделителя. Разделитель является простой линией. В основном он используется для отделения таких команд как "Создать", "Открыть", "Новый" от команд типа "Печать", "Предварительный просмотр" и т. д. В нашем примере мы рассмотрим как создавать подменю и разделители.

menu.h

#include <wx/wx.h>

#include <wx/menu.h>

class SubMenu : public wxFrame

{

public:

SubMenu(const wxString& title);

void OnQuit(wxCommandEvent & event);

wxMenuBar *menubar;

wxMenu *file;

wxMenu *imp;

wxMenuItem *quit;

};

menu.cpp

#include "menu.h"

SubMenu::SubMenu(const wxString& title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))

{

menubar = new wxMenuBar;

file = new wxMenu;

file->Append(wxID_ANY, wxT("&New"));

file->Append(wxID_ANY, wxT("&Open"));

file->Append(wxID_ANY, wxT("&Save"));

file->AppendSeparator();

imp = new wxMenu;

imp->Append(wxID_ANY, wxT("Import newsfeed list..."));

imp->Append(wxID_ANY, wxT("Import bookmarks..."));

imp->Append(wxID_ANY, wxT("Import mail..."));

file->AppendSubMenu(imp, wxT("I&mport"));

quit = new wxMenuItem(file, wxID_EXIT, wxT("&Quit\tCtrl+W"));

file->Append(quit);

menubar->Append(file, wxT("&File"));

SetMenuBar(menubar);

Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,

Pages: ← previous Ctrl next
1 2 3

Original (English): The wxWidgets programming tutorial (3. Menus and Toolbars).

Translation: © ber113, Косолапов Михаил .

translated.by crowd

Like this translation? Share it or bookmark!