Руководство по программированию с wxWidgets (8. Виджеты часть 2).

Jan Bodnar, “ The wxWidgets programming tutorial (8. Wigets part 2)”, public translation into Russian from English More about this translation.

Translate into another language.

Виджеты часть 2.

В этой главе мы продолжим знакомство с различными виджетами.

wxListBox (Окно списка)

Окно списка (лист бокс) используется для отображения и работы со списком объектов. Как следует из названия - это прямоугольник внутри которого находится список строк. Мы можем использовать его для отображения списка mp3 файлов, названий книг, модулей большого программного проекта, имен друзей. У этого виджета есть два режима работы: режим одиночного выбора и режим множественного выбора. По-умолчанию задаётся режим одиночного выбора. С лист боксом связано два важных события. Первое: wxEVT_COMMAND_LISTBOX_SELECTED. Это событие генерируется когда мы выбираем сроку в лист боксе. Второе: wxEVT_COMMAND_LISTBOX_DOUBLE_CLICKED. Оно генерируется, когда мы дважды щёлкаем на объекте в лист боксе. Количество элементов внутри лист бокса ограничено платформой GTK. В соответствии с документацией это число не должно превышать 2000 элементов. Элементы нумеруются с нуля. Полосы прокрутки появляются автоматически, когда в этом возникает необходимость.

listbox = new wxListBox(panel, ID_LISTBOX,

wxPoint(-1, -1), wxSize(-1, -1));

Это конструктор виджета окна списка.

В нашем примере мы использовали лист бокс и четыре кнопки, которые служат для добавления, переименования, удаления и очистки всех элементов списка.

wxString str = wxGetTextFromUser(wxT("Add new item"));

if (str.Len() > 0)

m_lb->Append(str);

Чтобы добавить новую строку в лист бокс, мы отображаем диалог wxGetTextFromUser, а потом вызываем метод Append(), который добавляет полученную с помощью диалога строку в список.

m_lb->Clear();

Для очистки всех элементов списка нужно просто вызвать метод Clear().

int sel = m_lb->GetSelection();

if (sel != -1) {

m_lb->Delete(sel);

}

Для удаления элемента мы вычисляем выбранный элемент, а потом вызываем метод Delete().

Переименование элементов осуществляется в несколько шагов.

wxString text;

wxString renamed;

Мы определили две локальные переменные.

int sel = listbox->GetSelection();

if (sel != -1) {

text = listbox->GetString(sel);

renamed = wxGetTextFromUser(wxT("Rename item"),

wxT("Rename dialog"), text);

}

Мы получаем выбранную строку и сохраняем её в переменной renamed.

if (!renamed.IsEmpty()) {

m_lb->Delete(sel);

m_lb->Insert(renamed, sel);

}

Мы проверяем не является ли переменная renamed пустой. Это для предотвращения добавления пустых строк. После этого мы удаляем старый элемент и добавляем новый.

wxNotebook (Записная книжка)

Записная книжка - это виджет объединяющий множество окон с соответствующими ярлыками. Вы можете позиционировать записную книжку с помощью следующих флагов:

* wxNB_LEFT (Слева)

* wxNB_RIGHT (Справа)

* wxNB_TOP (Сверху)

* wxNB_BOTTOM (Снизу)

Позицией по-умолчанию является сверху.

В этом примере мы создали виджет записной книжки с тремя таблицами и поместили его снизу.

wxNotebook *nb = new wxNotebook(this, -1, wxPoint(-1, -1),

wxSize(-1, -1), wxNB_BOTTOM);

Здесь мы создали записную книжку.

nb->AddPage(grid1, wxT("Sheet1"));

nb->AddPage(grid2, wxT("Sheet2"));

nb->AddPage(grid3, wxT("Sheet3"));

Мы добавили три объекта таблицы в записную книжку

wxScrolledWindow (Прокручивающееся окно)

Это один из виджетов контейнеров. Он может быть полезен, когда у нас отображаемая область больше чем окно. В нашем примере мы демонстрируем как раз такой случай. Мы поместили в наше окно изображение большого размера. Когда окно меньше, чем наше изображение автоматически появляются полосы прокрутки.

В нашем примере мы выводим изображение Замка Спис.

wxImage::AddHandler(new wxJPEGHandler);

Для обработки jpeg изображений мы должны инициировать соответствующий обработчик wxJPEGHandler.

wxScrolledWindow *sw = new wxScrolledWindow(this);

wxBitmap bmp(wxT("castle.jpg"), wxBITMAP_TYPE_JPEG);

wxStaticBitmap *sb = new wxStaticBitmap(sw, -1, bmp);

Мы создали прокручивающееся окно и поместили в него объект wxStaticBitmap.

sw->SetScrollbars(10, 10, width/10, height/10);

Установили полосы прокрутки.

sw->Scroll(50,10);

Немного прокрутили окно.

Original (English): The wxWidgets programming tutorial (8. Wigets part 2)

Translation: © ber113 .

translated.by crowd

Like this translation? Share it or bookmark!