
- •Уп. 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.3. Полоса прокрутки
2.3.1. Общие сведения
Полосы прокрутки широко используют для просмотра содержимого документа, которое не помещается в окне. Такие полосы бывают только горизонтальные или вертикальные. Они располагаются соответственно в нижней и правой части окна. Понятие полоса прокрутки не ограничивается полосой просмотра. Оно в общем случае представляет собой множество окон класса scrollbar различного назначения (табл. 2.4). Наиболее сложную разновидность окон класса "scrollbar" представляют полосы просмотра.
Полоса просмотра состоит из нескольких объектов, имеющих различное назначение (рис. 2.2).
Рис. 2.2. Вертикальная полоса просмотра окна
Представим, что в окне отображен некий документ.
Если установить курсор мыши на верхнюю "кнопку с треугольником" полосы просмотра и нажать левую клавишу мыши, документ в окне сдвигается вниз на одну "строку". Если же аналогичным образом нажать на нижнюю "кнопку с треугольником", документ сдвигается на одну "строку" вверх. Ползунок при этом скачком сдвигается соответственно на одну "позицию" вверх или вниз.
Если установить курсор мыши в область полосы просмотра между ползунком и верхней кнопкой и нажать на левую клавишу мыши, документ сдвигается вниз на одну "страницу". Если щелкнуть левой клавишей мыши в области между ползунком и нижней кнопкой, документ сдвинется на одну "страницу" вверх. Ползунок при этом скачком сдвигается соответственно на одну "страницу" вверх или вниз.
Ползунок можно плавно перемещать мышью вдоль полосы просмотра. В процессе перемещения содержимое окна перемещается или отображается в позиции ползунка.
Таким образом, в зависимости от вида воздействия мыши полоса просмотра может посылать 7 различных сообщений родительскому окну.
Горизонтальная полоса просмотра состоит из тех же объектов, что и вертикальная. Она обеспечивает свертку документа в горизонтальном направлении.
Существуют и менее привычные виды полос прокрутки. Например, это полоса прокрутки стиля SBS_SIZEBOX. Пример такой полосы будет рассмотрен ниже.
2.3.2. Создание полосы прокрутки
Существует 3 способа создания полосы прокрутки
Полосу прокрутки можно создать с помощью вызова функции CreateWindow. Этот способ аналогичен способу, используемому при создании кнопок или статических органов управления. Первым аргументом вызова функции CreateWindow указывают "scrollbar", а вторым – NULL (заголовок окна не используется). Дескриптор полосы прокрутки используют функции управления полосами прокрутки. Количество и разновидность полос, создаваемых таким способом, ничем не ограничено.
При создании любого окна с помощью функции CreateWindow можно указать, что окно имеет горизонтальную, вертикальную или обе полосы просмотра. Для того чтобы у окна появились вертикальная и/или горизонтальная полосы просмотра, при создании окна в третьем параметре функции CreateWindow указывают стиль WS_VSCROLL и/или WS_HSCROLL. Например:
hwnd = CreateWindow(szClassName, szWindowTitle,
WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
0, 0, hInstance, NULL);
Некоторые органы управления также могут иметь полосы просмотра.
Во втором и третьем способах дескрипторы для полос просмотра не создаются.