
- •Уп. 2. Органы управления в приложениях Win32
- •2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •2.2. Статический орган управления
- •2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •2.3.6. Пример обработки сообщений от полос прокрутки
- •2.3.7. Новые функции управления полосами прокрутки
- •2.3.8. Пример окна приложения с полосой просмотра
- •2.4. Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •2.4.4. Пример работы с однострочным редактором
- •2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •2.5.4. Пример работы со списком
- •2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •2.6.4. Пример работы с комбинированным списком
- •Контрольные вопросы
- •Упражнения
- •Приложение 2
Приложение 2
Таблица 2.1. Список имен определенных в системе классов
Имя класса |
Пояснение |
Сообщение родительскому окну |
"button" |
Окно, состояние которого изменяется при выборе и нажатии. Это нажимающиеся кнопки (push button), переключатели (radio button) и флажки (check box) |
WMCOMMAND |
"static" |
Текстовое поле, прямоугольник выделения и другие элементы оформления |
WMNCHITTEST |
"scrollbar" |
Полоса прокрутки – прямоугольник с ползунком и стрелками направления в оба конца. Родительское окно обеспечивает калибровку и установку позиций ползунка. Полоса прокрутки имеет такие же вид и функцию, что и полосы просмотра окна, но может появиться где угодно. Она также обеспечивает изменение размеров окна |
WMHSCROLL и WMVSCROLL |
"edit" |
Окно ввода текста из клавиатуры или редактор |
WMCOMMAND |
"listbox" |
Список символьных строк. При просмотре в каждый момент подсвечивается одна строка и о ней передается сообщение родительскому окну |
WMCOMMAND |
"combobox" |
Орган управления, состоящий из списка и поля выбора. Список может быть распахнут или свернут. Если список распахнут, при вводе символов в поле выбора список устанавливает в начало первое вхождение наиболее похожей строки списка |
WMCOMMAND |
Таблица 2.2. Список стилей окон класса "button"
Стили |
Пояснение |
BS_3STATE |
Флажок (квадратик), который может находиться во включенном (перечеркнут), выключенном (не перечеркнут) и неактивном (отображается серым цветом) состоянии |
ВS_AUTO3STATE |
То же, что и ВS_3STATE, но вид квадратика автоматически изменяется при переключении, циклически отображая включенное, выключенное и неактивное состояние |
BS_AUTOCHECKBOX |
Флажок, который может находиться только во включенном или выключенном (неактивном) состоянии |
BS_AUTORADIOBUTTON |
Переключатель (окружность), который может находиться во включенном (внутри имеется жирная черная точка) или выключенном (внутри нет точки) состоянии. В группе может быть включен только один переключатель этой группы |
BS_CHECKBOX |
То же, что и BS_AUTOCHECKBOX, но с текстом справа от флажка |
BS_DEFPUSHBUTTON |
То же, что и BS_PUSHBUTTON, но кнопка имеет толстую черную рамку. Если такая кнопка находится в диалоговом окне, то она посылает сообщение родительскому окну при нажатии клавиши Enter, даже если она не имеет фокуса ввода. Этот стиль используется для задания кнопок по умолчанию |
BS_GROUPBOX |
Прямоугольник, в котором группируют органы управления. Он не принимает сообщения. Текст этого органа отображается в верхнем левом угле прямоугольника |
BS_LEFTTEXT или ВS_RIGHTBUTTON |
Этот стиль дополняет стиль флажка или переключателя и помещает текст слева от элемента |
BS_PUSHBUTTON |
Стандартная кнопка без рамки |
ВS_RADIOBUTTON |
Переключатель с текстом справа, который может находиться во включенном или выключенном состоянии |
BS_ICON |
Органом управления является иконка |
ВS_MULTILINE |
Распределить текст в нескольких строках внутри прямоугольника кнопки |
BSNOTIFY |
Орган управления посылает сообщения BN_DBLCLK, BN_KILLFOCUS и BN_SETFOCUS родительскому окну |
BS_PUSHLIKE |
Флажок или переключатель этого стиля ведет себя подобно кнопке – приподнимается или протапливается |
BS_TEXT |
Орган управления является текстом |
BS_RIGHT, BS_LEFT, BS_TOP и BS_BOTTOM |
Текст выровнен соответственно по правому, левому, верхнему или нижнему краю в прямоугольнике кнопки |
BS_CENTER |
Центрирует текст по горизонтали в прямоугольнике кнопки |
BS_VCENTER |
Центрирует текст по вертикали в прямоугольнике кнопки |
Таблица 2.3. Список стилей окон класса "static"
Стили |
Описание |
SS_BLACKFRAME, SS_GRAYFRAME или SS_WHITEFRAME |
Прямоугольня рамка системного цвета соответственно COLOR_WINDOWFRAME ("черного" цвета рамок окон), COLOR_BACKGROUND ("серого" цвета фона экрана) или COLOR_WINDOW ("белого" цвета рабочей области окон). Внутренняя область остается незакрашенной. Текст заголовка окна не используется. Соответствующий параметр функции CreateWindow указывают как NULL |
SS_BLACKRECT, SS_GRAYRECT или SS_WHITERECT |
Закрашенный прямоугольник системного цвета соответственно COLOR_WINDOWFRAME ("черного" цвета рамок окон), COLOR_BACKGROUND ("серого" цвета фона экрана) или COLOR_WINDOW ("белого" цвета рабочей области окон). Текст заголовка окна не используют. Этот параметр функции CreateWindow указывают как NULL |
SS_LEFT, SS_RIGHT или SS_CENTER |
В заданном прямоугольнике указанный текст выводит функция DrawText, соответственно выравнивая его по левому, правому краю или центрируя и перенося слова в следующую строку. Не поместившаяся в прямоугольнике часть текста не отображается. Символы табуляции заменяются пробелами |
SS_LEFTNOWORDWRAP |
То же, что и SS_LEFT, но без переноса слов |
SS_NOPREFIX |
Этот стиль дополняет другие стили в тех случаях, когда необходимо отменить специальную обработку символа &. Обычно этот символ не выводится статическими органами управления на экран, а следующий за ним символ изображается подчеркнутым (для изображения символа & его надо повторить 2 раза подряд) |
SS_NOTIFY |
Окно этого стиля функции родительского окна посылает сообщения STN_CLICKED и STN_DBLCLK о нажатии или двойном щелчке левой клавишей мыши |
SS_SIMPLE |
Выводит текст в одну строку, используя функцию TextOut и выравнивая по левому краю. Символы табуляции не заменяет пробелами. При повторном выводе текста содержимое прямоугольника не стирается, поэтому новый текст не должен быть короче прежнего. Обычно комбинируют со стилем SS_NOPREFIX (используется более быстрая функция ExtTextOut) |
Таблица 2.4. Список стилей окон класса "scrollbar"
Стили |
Описание |
SBS_BOTTOMALIGN или SBS_TOPALIGN |
В нижней или верхней части прямоугольника, заданного аргументами вызова функции CreateWindow, создается горизонтальная полоса прокрутки, высота которой равна высоте системной полосы просмотра. Этот стиль используется вместе с SBS_HORZ |
SBS_HORZ |
Если не указан стиль SBS_BOTTOMALIGN или SBS_TOPALIGN, то позиция, высота и ширина горизонтальной полосы прокрутки определяются аргументами х, у, nWidth и nHeight вызова функции CreateWindow |
SBS_LEFTALIGN или SBS_RIGHTALIGN |
В левом или правом краю прямоугольника, заданного аргументами вызова функции CreateWindow, создается вертикальная полоса прокрутки, ширина которой равна ширине системной полосы просмотра. Этот стиль используется вместе с SBS_VERT |
SBS_SIZEBOX |
Создается прямоугольник серого цвета. Если установить курсор мыши внутрь прямоугольника, нажать левую клавишу и перемещать мышь, родительское окно получает сообщения, аналогичные сообщениям от рамки изменения размера окна. Если стили SBS_SIZEBOXBOTTOMRIGHTALIGN и SBS_SIZEBOXTOPLEFTALIGN не указаны, то прямоугольник задается аргументами х, у, nWidth и nHeight функции CreateWindow |
SBS_SIZEBOXBOTTOMRIGHTALIGN (SBS_SIZEBOXTOPLEFTALIGN) |
Аналогично SBS_SIZEBOX, но правый нижний (левый верхний) угол прямоугольника выравнивается по правому нижнему (Левому верхнему) углу прямоугольника, определенного при вызове функции CreateWindow, а для высоты и ширины органа управления используются системные значения. Этот стиль применяется вместе с SBS_SIZEBOX |
SBS_SIZEGRIP |
Тот же самый, что и SBS_SIZEBOX, но с поднятым краем |
SBS_VERT |
Если не указан стиль SBS_RIGHTALIGN или SBS_LEFTALIGN, то позиция, высота и ширина вертикальной полосы прокрутки определяются аргументами вызова функции CreateWindow |
Таблица 2.5. Список стилей окон класса "edit"
Стиль |
Назначение |
ES_AUTOHSCROLL |
Автоматически сдвигать текст влево на 10 символов при достижении правой границы окна ввода. В многострочном редакторе для перехода в начало следующей строки нужно нажать клавишу Enter |
ES_AUTOVSCROLL |
Используется в многострочном редакторе для автоматического сдвига текста вверх на одну строку при достижении нижней границы окна ввода. Иначе при достижении нижней границы будет выдан звуковой сигнал |
ES_CENTER |
Центрировать строки по горизонтали |
ES_LEFT |
Выравнивать текст по левому краю окна ввода. Часто используется для задания однострочного редактора текста и комбинируется со стилем ES_AUTOHSCROLL |
ES_LOWERCASE |
Преобразовать вводимые символы в строчные |
ES_MULTILINE |
Многострочный редактор. Обычно комбинируют со стилями ES_WANTRETURN (для использования клавиши Enter в целях перехода на новую строку), ES_AUTOVSCROLL (для перелистывания текста по вертикали, иначе текст только сдвигается вверх при достижении нижнего края окна и подается звуковой сигнал), ES_AUTOHSCROLL (для перелистывания текста по горизонтали, иначе ввод автоматически переносится в начало следующей строки при достижении правого края окна). Для подключения полос просмотра многострочному редактору этот стиль комбинируют со значениями WS_HSCROLL и WS_VSCROLL. Функция окна многострочного редактора сама обрабатывает сообщения от полос просмотра |
ES_NOHIDESEL |
При потере фокуса ввода выделенный в окне фрагмент текста отображать в инверсном цвете. Если этот стиль не указан, выделение фрагмента пропадает до возврата фокуса ввода |
ES_NUMBER |
Разрешить ввод только цифр |
ES_PASSWORD |
Отображать звездочку (*) для каждого вводимого символа |
ES_READONLY |
Запрет редактирования текста в окне редактирования |
ES_RIGHT |
Выравнивать текст по правому краю окна |
ES_UPPERCASE |
Преобразовать вводимые символы в прописные |
ES_WANTRETURN |
При нажатии на клавишу ENTER перейти в начало следующей строки. Иначе в диалоговых окнах нажатие клавиши ENTER воспринимается как нажатие кнопки по умолчанию. Стиль используется в комбинации со стилем ES_MULTILINE и только в диалоговых панелях |
Таблица 2.6. Список стилей окон класса "listbox"
Стиль |
Пояснение |
LBS_DISABLENOSCROLL |
Вертикальную полосу просмотра отображать в неактивном состоянии (но не скрывать), если в списке помещаются все строки. Без указания стиля LBS_DISABLENOSCROLL в аналогичной ситуации вертикальная полоса просмотра пропадает. Используется, если нежелательно изменение внешнего вида списка |
LBS_EXTENDEDSEL |
С помощью клавиши Shift или мыши можно выделять несколько расположенных рядом строк |
LBS_HASSTRINGS |
Список родительскому окну посылает сообщение WM_VKEYTOITEM с кодом виртуальной клавиши LOWORD(wParam), с номером текущей строки HIWORD (wParam) и дескриптором списка lParam |
LBS_MULTICOLUMN |
Многоколоночный список. Количество колонок задают сообщением LB_SETCOLUMNWIDTH |
LBS_MULTIPLESEL |
С помощью клавиши Shift или мыши можно выделять несколько строк в любом месте списка |
LBS_NOINTEGRALHEIGHT |
Высота окна не обязательно кратна высоте строк |
LBS_NOREDRAW |
Не перерисовывать содержимое при добавлении или удалении строк |
LBS_NOSEL |
Определяет, что окно списка содержит единицы, которые могут просматриваться, но не выбран |
LBS_NOTIFY |
Сообщать о двойном щелчке мышью по строке |
LBS_OWNERDRAWFIXED |
Список строк одинаковой высоты, перерисовывается родительским окном |
LBS_OWNERDRAWVARIABLE |
Список строк переменной высоты, перерисовывается родительским окном |
LBS_SORT |
Сортировать строки в алфавитном порядке |
LBS_STANDARD |
Комбинация стилей LBS_NOTIFY, LBS_SORT, WS_BORDER и WS_VSCROLL. Обычно используют для создания простейшего одноколоночного списка |
LBS_USETABSTOPS |
При отображении строк преобразовывать символы табуляции. По умолчанию один символ табуляции расширяется на 32 единицы ширины диалоговых панелей (или 8 единиц средней ширины текущего шрифта) |
LBS_WANTKEYBOARDINPUT |
Родительское окно от списка получает сообщения WM_VKEYTOITEM или WM_CHARTOITEM при работе со списком при помощи клавиатуры. Это дает возможность приложению выполнить специальную обработку ввода с клавиатуры |
Таблица 2.7. Список стилей окон класса "ComboBox"
Стиль |
Пояснение |
CBS_AUTOHSCROLL |
Автоматическая свертка текста по горизонтали в окне редактирования |
CBS_DISABLENOSCROLL |
Вертикальную полосу просмотра отображать в неактивном состоянии, даже если в списке помещаются все строки |
CBS_DROPDOWN |
Подобен CBS_SIMPLE, но список остается в невидимом состоянии до тех пор, пока пользователь не нажмет пиктограмму, предназначенную для отображения списка |
CBS_DROPDOWNLIST |
Подобен CBS_DROPDOWN, но однострочный текстовый редактор может быть использован только для отображения текста, а не для редактирования |
CBS_LOWERCASE |
Преобразовать все символы в строчные |
CBS_SIMPLE |
Создается список, который всегда виден и расположен под окном однострочного редактора текста, содержащего выделенную в списке строку |
CBS_SORT |
Автоматически сортирует строки, введенные в окно списка |
CBS_UPPERCASE |
Преобразовать все символы в прописные |