Создадим проект на основе шаблона "wx base":
Назовем проект template_wx_frame.
Добавим к проекту класс main_frame, наследуясь от wxFrame:
Визард класса в файл main_frame.h автоматически добавил строку:
#include "D:\Cpp\Lib\wx\include\wx\univ\frame.h"
Нам этого добра не нужно: все нужные wzWidgets объявления доступны через файл прекомпилированных заголовков, поэтому заменяем эту строку на следующую:#include "pch.h"
Далее, переходим к файлу wxMain.pas. Добавляем строку
#include "main_frame.h".
Меняем метод OnIni. Создаем экземпляр класса фрейма (окна) и показываем его:
Содержимое файла после изменения:
#include "pch.h" #include "main_frame.h" class wx_main : public wxApp { public: virtual bool OnInit() { main_frame* mf = new main_frame("Привет!", wxPoint(50, 50), wxSize(450, 340)); mf->Show(); return true; }; }; wxIMPLEMENT_APP(wx_main);
Файл main_frame.h - расширяем описание класса main_frame, содержимое файла должен выглядеть так:
#pragma once #include "pch.h" class main_frame : public wxFrame { public: main_frame(const wxString& title, const wxPoint& pos, const wxSize& size); private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); }; enum { ID_Hello = 1 };
В конструктор класса передаются параметры: заголовок окна, координаты центра и размеры.
Также добавляем обработчики событий On*().
Enum. В WxWidgets есть стандартные идентификаторы, к ним мы добавим ещё один ID_Hello.
Реализация класса main_frame - в файле main_frame.cpp.
#include "pch.h" #include "main_frame.h" main_frame::main_frame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { wxMenuBar* menuBar = new wxMenuBar; // Создание главного меню wxMenu* menuFile = new wxMenu; // Создание пункта меню "Файл" menuBar->Append(menuFile, "&Файл"); // Добавление созданного пункта меню к главному меню menuFile->Append(ID_Hello, "П&ривет...\tCtrl-H",// Добавлении строки меню к пункту "Файл" "Строка помощи в строке стостояния для данного пункта меню"); menuFile->AppendSeparator(); // Разделитель списка пунктов меню menuFile->Append(wxID_EXIT, "В&ыход", "Завершить приложение"); // Добавление пункта меню к пункту "Файл" wxMenu* menuHelp = new wxMenu; // Создание пункта меню "Помощь" menuBar->Append(menuHelp, "&Помощь"); menuHelp->Append(wxID_ABOUT, "О программе", "Показать диалог \"О программе\"" ); SetMenuBar(menuBar); // CreateStatusBar(); // Создание строки состояния ("статусбар") SetStatusText("Привет, это wxWidgets!"); // Текст в строке состояния по умолчанию // Привязка идентификаторов событий к обработчикам событий Bind(wxEVT_MENU, &main_frame::OnHello, this, ID_Hello); Bind(wxEVT_MENU, &main_frame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &main_frame::OnExit, this, wxID_EXIT); } void main_frame::OnHello(wxCommandEvent& event) { wxLogMessage("Привет от wxWidgets!"); } void main_frame::OnExit(wxCommandEvent& event) { Close(true); } void main_frame::OnAbout(wxCommandEvent& event) { wxMessageBox("Это пример wxWidget - приложения ' Привет, Мир!", "О приложении", wxOK | wxICON_INFORMATION); }
В конструкторе класса создаются классы-оболочки визардов: меню, пунктов меню и статусбара.
При создании каждого пункта меню указывается идентификатор события, название и вспомогательный текст, который будет отображаться в статусбаре. Например:
menuFile->Append(wxID_EXIT, "В&ыход", "Завершить приложение");
Далее идентификаторы событий связываются с методами-обработчиками. Указывается тип события, ссылка на метод-обработчик, указатель на экземпляр класса обработчика и идентификатор события. Например:
Bind(wxEVT_MENU, &main_frame::OnHello, this, ID_Hello);
Строим приложение, запускаем:
И так, здесь форма создана "вручную", в коде.
Далее научимся использовать wxFormBuilder.




Комментариев нет:
Отправить комментарий