Вгрызаемся поглубже в окна
March 25th, 2009 Begemot Posted in Учебники
Продолжаю, вернее заканчиваю выкладывать перевод начала 4 главы сделанный Андреем Лизуновым. Начало про основы работы с окнами в wxWidgets здесь.
Краткий путеводитель по классам окон
Оставшаяся часть этой главы снабдит Вас достаточно детальной информацией о наиболее часто используемых оконных классах, для того, чтобы Вы смогли применить их в своих приложениях. Однако, если вы читаете эту книгу в первый раз, то Вы, возможно, захотите перепрыгнуть вперед, к главе 5, и просмотреть описания окон позже.
Здесь находится краткий обзор классов, для того, что бы Вам было проще ориентироваться в этой главе. Другие классы окон ищите в главе 12 «Усовершенствованные классы окон» и приложение E «Сторонние инструменты для wxWidgets».
Базовые классы окна
Эти классы реализуют функциональность для конкретных классов потомков.
-
wxWindow — базовый класс для всех окон.
-
wxControl — базовый класс для всех элементов управления, таких, как wxButton.
-
wxControlWithItems — базовый класс для многоэлементных элементов управления..
Верхнеуровневые окна
Верхнеуровневые окна обычно существуют независимо на рабочей области.
-
wxFrame — окно, с изменяемыми размерами, которое содержит в себе другие окна.(*1)
-
wxMDIParentFrame — фрейм, который управляет другими фреймами.
-
wxMDIChildFrame — фрейм, которым управляет фрейм родитель.
-
wxDialog — окно, с изменяемыми размерами, для представления вариантов выбора.(*2)
-
wxPopupWindow — временное окно с минимальным декорированием.(*3)
Окна – контейнеры
Окна – контейнеры управляют дочерними окнами.
-
wxPanel — окно для расположения элементов управления.
-
wxNoteBook — окно, для переключения страниц при помощи вкладок.
-
wxScrolledWindow — окно, которое прокручивает потомков и графику.
-
wxSplitterWindow — окно, которое управляет двумя дочерними окнами.
Не статичные элементы управления
Пользователь может редактировать эти контроллеры.
-
wxButton — кнопка с текстовой меткой.
-
wxBitmapButton — кнопка с растровым изображением.
-
wxChoice — раскрывающийся список с вариантами выбора.
-
wxComboBox — поле со списком с вариантами выбора и с возможностью редактирования
-
wxCheckBox — окно, представляющее кнопку-флажок, вкл. или выкл.
-
wxListBox — список строковых элементов с возможность выбора.
-
wxRadioBox — сетка из переключателей.
-
wxRadioButton — элемент управления напоминающий переключатель.
-
wxScrollBar — полоса прокрутки
-
wxSpinButton — стрелочки для увеличения/уменьшения значений.
-
wxSpinCtrl — текстовое поле и стрелочки для редактирования целых значения.
-
wxSlider — контроллер, для изменения значения в данном диапазоне.
-
wxTextCtrl — одно- или много-строчное поле для ввода текста
-
wxToggleButton — кнопка тумблер, которая может быть включена или выключена.
Статичные контроллеры
Эти элементы управления представляют информацию и не могут быть изменены пользователем.
-
wxGauge — контроллер, показывающий количество или прогресс.
-
wxStaticText — контроллер, показывающий текстовую метку.
-
wxStaticBitmap — контроллер, который изображает растровое изображение.
-
wxStaticLine — контроллер, отображающий линию.
Меню
Меню, это временные окна, содержащие в себе списки команд.
-
wxMenu — может быть использовано как контекстное (*5) меню или в панели меню.
Панели управления
Панели управления представляют быстрый доступ к командам и информации, обычно внутри wxFrame.
-
wxMenuBar — панель меню, которая представляет команды в wxFrame.
-
wxToolBar — панель инструментов, которая представляет быстрый доступ к командам.
-
wxStatusBar — панель состояния, которая отображает информацию в нескольких полях.
Базовые оконные классы
Эта глава, ценное упоминание базовых классов которые вы или сможете использовать напрямую или нет, но они реализуют большую часть функциональности для наследников. Пользуйтесь API ссылкой на эти (и другие) базовые классы так же как и ссылкой на наследников что-бы получить полное понимание доступных возможностей.
wxWindow
wxWindow это и важный базовый класс и конкретный класс окна, который вы можете инстанцировать(*6). Однако, скорее всего, вы будете наследовать от него (или использовать уже существующих наследников) а не пользоваться им напрямую. Как мы уже видели, wxWindow может быть создан или в один шаг, используя конструктор не по умолчанию, или в два шага, используя конструктор по умолчанию и следом Create. Для создания в один шаг, пользуйтесь этим конструктором.
wxWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("panel"));
Например:
wxWindow* win = new wxWindow(parent, wxID_ANY, wxPoint(100, 100), wxSize(200, 200));
Стили wxWindow
Каждый оконный класс может дополнять базовые стили, определённые для wxWidow и перечисленные в таблице 4-1. Не все местные контроллеры поддерживают все стили рамок, и если рамка не указанна, то будет использован соответствующий стиль по умолчанию. Например, в OC Windows, большинство wxControl, это унаследованные классы, использующие wxSUNKEN_BORDER по умолчанию, который будет интерпретироваться как стиль рамки для текущей темы. Приложение может подавить рамку по умолчанию используя такой стиль как wxNO_BORDER.
Базовые стили окна
- wxSIMPLE_BORDER Отображает тоненький бордюрчик вокруг окна
- wxDOUBLE_BORDER Отображает двойной бордюр
- wxSUNKEN_BORDER Отображает утопленный бордюр или бордюр контроллера согласующийся с текущей темой.
- wxRAISED_BORDER Отображает выпуклый бордюр.
- wxSTATIC_BORDER Отображает бордюр, подходящий для статичного контрола. Только для OC Windows.
- wxNO_BORDER Отображает без бордюра. Таким образом отменяет любые попытки wxWidgets добавить подходящий бордюр.
- wxTRANSPARENT_WINDOW Определяет прозрачное окно (то которое не получает события отрисовки. Только для OC Windows.
- wxTAB_TRAVERSAL Используйте это чтобы включить переходы по Tab для не диалоговых окон.
- wxWANTS_CHARS Пользуйтесь этим чтобы обозначить что это окно желает получать все события от клавиатуры, даже от клавиш Tab и Enter, которые используются для диалоговой навигации и которые не сгенерировались без этого стиля.
- wxFULL_REPAINT_ON_RESIZE По умолчанию, под ОС Winows, wxWidgets не будет перерисовывать клиентскую область целиком во время изменения размера. Этот стиль гарантирует что вся клиентская область будет перерисована вся клиентская область.
- wxVSCROLL Включает вертикальную полосу прокрутки.
- wxHSCROLL Включает горизонтальную полосу прокрутки.
- wxALWAYS_SHOW_SB Если у окна есть полосы прокрутки, то оно просто отключает их, когда в них нет нужды, вместо того, чтобы прятать (когда размер окна достаточно велик и для навигации по нему полоса прокрутки не требуется). Этот стиль, в момент написания книги, реализован только для ОС Windows и wxUniversal.
- wxCLIP_CHILDREN Только для ОС Windows. Используется для того, чтобы устранить мерцание, вызванное тем, что окно очищает фон своих дочерних окон.
Таблица 4-2 перечисляет дополнительные стили, которые не могут быть размещены в регулярном стиле, и которые устанавливаются wxWindow::SetExtraStyle.
Таблица 4-2. Основные дополнительные стили окна.
- wxWS_EX_VALIDATE_RECURSIVELY По умолчанию, Validate, transferDataToWindow, и transferDataFromWindow работает только на прямых потомков окна. Устанавливайте этот стиль если хотите сделать их рекурсивно спускающимися по всем под-окнам.
- wxWS_EX_BLOCK_EVENTS wxCommandEvents и объект наследника отправляются к родительскому окну, и так далее, рекурсивно, по умолчанию Использую, этот стиль, для данного окна, включает возможность блокировать это распространение в этом окне, ради того, чтобы предотвратить распространение событий далее (*7). У диалогов такой стиль по умолчанию, но заметьте, что если SetExtraStyle вызывается приложением, то он может быть переустановлен.
- wxWS_EX_TRANSIENT Не используйте такое окно как неявного родителя для других окон. Этот стиль должен быть использован для временных окон, иначе, есть риск создать диалог или фрейм с таким окном в качестве родителя, что может привести к краху, если родитель будет уничтожен прежде потомка.
- wxWS_EX_PROCESS_IDLE Этому окну следует всегда обрабатывать события простоя, даже если режим, установлен wxIdleEvent::SetMode как wxIDLE_PROCESS_SPECIFIED.
- wxWS_EX_PROCESS_UI_UPDATES Этому окну следует всегда обрабатывать обновления событий пользовательского интерфейса, даже если режим, установлен wxUpdateUIEvent::SetMode как wxUPDATE_UI_PROCESS_SPECIFIED. См. Главу 9 за дальнейшей информацией по событиям обновления пользовательского интерфейса.
События wxWindow
wxWindow и все его наследники генерируют сообщение перечисленные в таблице 4-3. События, генерируемые мышкой, клавиатурой или джойстиком, описаны в главе 6.
Таблица 4-3. wxWindow события
- EVT_WINDOW_CREATE(func) Обрабатывает распространение события wxEVT_CREATE, генерируемое когда низлежащие окна были только что созданы. Обработчики получают объект wxWindowCreateEvent.
- EVT_WINDOW_DESTROY(func) Обрабатывает распространение события wxEVT_DELETE, генерируемое когда окно вот-вот будет разрушено. Обработчики получают объект wxWindowDestroyEvent.
- EVT_PAINT(func) Обрабатывает событие wxEVT_PAINT, генерируемое когда окну требуется обновление. Обработчики получают объект wxPaintEvent.
- EVT_ERASE_BACKGROUND(func) Обрабатывает событие wxEVT_ERASE_BACKGROUND, генерируемое когда окну требуется обновить фон. Обработчики получают объект wxEraseEvent.
- EVT_MOVE(func) Обрабатывает событие wxEVT_MOVE, генерируемое когда окно движется. Обработчики получают wxMoveEvent объект .
- EVT_SIZE(func) Обрабатывает событие wxEVT_SIZE, генерируемое когда окно меняет свои размеры. Обработчики получают объект wxSizeEvent.
- EVT_SET_FOCUS(func) \ EVT_KILL_FOCUS(func) Обрабатывает события wxEVT_SET_FOCUS и wxEVT_KILL_ FOCUS, генерируемые когда окну поучает или теряет фокусировку клавиатуры. Обработчики получают объект wxFocusEvent.
- EVT_SYS_COLOUR_CHANGED(func) Обрабатывает событие wxEVT_SYS_COLOUR_CHANGED, когда пользователь сменил цвет в панели управления (только для ОС Windows). Обработчики получают объект wxSysColourChangedEvent.
- EVT_IDLE(func) Обрабатывает событие wxEVT_IDLE, генерируемое во время простоя. Обработчики получают wxIdleEvent объект .
- EVT_UPDATE_UI(func) Обрабатывает событие wxEVT_UPDATE_UI, генерируемое во время простоя, чтобы дать окну возможность обновить себя.
(*1)Здесь и далее — фрейм
(*2)Здесь и далее — диалог
(*3)Здесь и далее — всплывающее окно
(*4)Элементы управления часто, для краткости, называют контроллерами.
(*5)Всплывающее
(*6)Инстанцирование — создание экземпляра класса (© Wiki)
(*7)Я всего лишь переводчик…