Продолжаем tutorial, теперь пора добавить немного активности.
Прежде всего - добавить кнопку. Назовём её Pimpa.
Пусть при нажатии на эту кнопку меняется значение нашего текстового поля. Но тогда это поле должно тоже приобрести имя - пусть будет Warning.
1 #include <wx/wx.h>
2
3 class MainApp: public wxApp{
4 public:
5 virtual bool OnInit();
6 };
7
8 enum{
9 BUTTON_Pimpa = 1
10 };
11
12 class MainFrame: public wxFrame{
13 public:
14 MainFrame( const wxString &title, const wxPoint &pos, const wxSize &size );
15 wxButton *Pimpa;
16 wxStaticText * Warning;
17 void changeText(wxCommandEvent& event){Warning->SetLabel(_T("А вы нажали на кнопку."));}
18 private:
19 DECLARE_EVENT_TABLE()
20 };
21
22 BEGIN_EVENT_TABLE ( MainFrame, wxFrame )
23 EVT_BUTTON ( BUTTON_Pimpa, MainFrame::changeText)
24 END_EVENT_TABLE()
25
26 DECLARE_APP(MainApp)
27 IMPLEMENT_APP(MainApp)
28 bool MainApp::OnInit(){
29 MainFrame *MainWin = new MainFrame(_("Заголовок окна"), wxDefaultPosition, wxSize(580, 200));
30 MainWin->Show(true);
31 SetTopWindow(MainWin);
32 return true;
33 }
34
35 MainFrame::MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size):wxFrame((wxFrame *) NULL, -1, title, pos, size) {
36 Pimpa = new wxButton(this, BUTTON_Pimpa, _T("Произвести вычисления"),wxDefaultPosition, wxDefaultSize, 0);
37 Warning = new wxStaticText (this, BUTTON_Pimpa + 1, _T("Я написал что-то на wxWidgets!!"), wxPoint(10,100), wxDefaultSize,0,wxStaticTextNameStr);
38 }
Скомпилируйте и зацените.А теперь по строкам.
Строки 8-10 задают идентификатор для кнопки. Зачем нужны эти ID, я упоминал уже ранее; теперь же можете посмотреть на строку 23.У этой строки такой смысл: при вызове контрола с ID Button_Pimpa надо звать метод changeText. Обработка событий происходит в закрытой части класса, что логично,а вот метод закрывать необязательно.
Строка 37 даёт ещё одно понятие арифметики идентификаторов. В самом деле, мы же можем взять следующий после кнопки. Есть ещё один трюк - это когда вы пишете wxID_HIGHEST + 1,, это даёт наибольший свободный ID. Ну да не суть важно.
Возможно,у вас ещё давным-давно возник вопрос, почему строковые константы заключены в интересные _T("") и _(""). Это макросы wxWidgets, которые конвертируют строки во внутренний тип wxString. Различие _T() и _ в том,что _T() позволяет включать интернационализацию строки - если вы вздумаете использовать gettext, то вам оно понадобится.
Кстати - здесь я также играю с позициями. Можно запросто поставить в тупик стандартный компоновщик, если прописать обоим контролам wxDefaultPosition. Но чем усложнять программу хаками, лучше сосредоточимся на действительно нужных вещах.
Итак,у нас есть уже кнопка и текстовый блок. Это уже кое-что. Но для какой-либо полезной программы не хватает ещё чего-то...текстового поля. Поля,куда вводятся числовые или строковые параметры.Этим мы и займёмся в следующем выпуске.
Комментариев нет:
Отправить комментарий