Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

8.4.1 Программа colors1

Для рассмотрения некоторых аспектов использования статических дочерних окон и полос прокрутки, а также для более глубокого изучения цветов, мы будем использовать программу COLORS1.

Программа COLORS1 выводит на экран три полосы прокрутки в левой половине рабочей области, помеченные "Red", "Green" и "Blue". Цвет правой половины рабочей области образуется путем сочетания трех исходных цветов, значения которых определяются положением бегунков полос прокрутки. Численные значения этих трех исходных цветов выводятся на экран под тремя полосами прокрутки.

Программа COLORS1 включает в работу свои дочерние окна. В программе используется 10 дочерних окон управления: три полосы прокрутки, 6 окон статического текста, и один статический прямоугольник. Программа COLORS1 обрабатывает сообщения WM_CTLCOLORSCROLLBAR для закрашивания внутренних участков трех полос прокрутки в красный, зеленый и голубой цвета, а также сообщения WM_CTLCOLORSTATIC для окрашивания статического текста.

Вы можете изменять состояние полос прокрутки либо с помощью мыши, либо с помощью клавиатуры. Вы можете использовать программу COLORS1 как инструмент для экспериментов с цветами и выбора наиболее привлекательного (или, если вам так хочется, самого некрасивого) цвета для ваших Windows-программ.

Программа COLORS1 не обрабатывает сообщений WM_PAINT. Фактически вся работа в программе COLORS1 выполняется дочерними окнами.

Цвет правой половины рабочей области окна фактически является цветом фона окна. Статическое дочернее окно со стилем SS_WHITERECT занимает левую половину рабочей области. Три полосы прокрутки являются дочерними окнами управления стиля SBS_VERT. Эти полосы прокрутки расположены в верхней части дочернего окна SS_WHITERECT. Еще шесть статических дочерних окон стиля SS_CENTER (выравнивание по центру) обеспечивают индикацию названий цветов и их значений. Программа COLORS1 строит обычное перекрывающееся окно и десять дочерних окон в функции WinMain при помощи функции CreateWindow. Окна SS_WHITERECT и SS_CENTER используют класс окна "static"; в трех полосах прокрутки используется класс окна "scrollbar".

Первоначально параметры, определяющие положение х и у, ширину и высоту окна функции CreateWindow устанавливаются в 0, поскольку они зависят от размера рабочей области, который еще не известен. Оконная процедура программы COLORS1 с помощью вызова функции MoveWindow изменяет размеры всех десяти дочерних окон, когда получает сообщение WM_SIZE. Поэтому, когда бы вы ни изменили размер окна программы COLORS1, пропорционально меняются и размеры полос прокрутки.

Когда оконная процедура WndProc получает сообщение WM_VSCROLL, то старшим словом параметра lParam является описатель дочернего окна. Для получения идентификатора дочернего окна можно использовать функцию GetWindowLong:

i = GetWindowLong(lParam, GWW_ID);

Мы задали идентификаторы трех полос прокрутки как три последовательных числа 0, 1 и 2, поэтому WndProc может информировать о том, какая из полос является источником сообщения.

Поскольку описатели дочерних окон при создании этих окон были сохранены в массиве, WndProc может обработать сообщение полосы прокрутки и установить новое положение соответствующей полосы прокрутки с помощью вызова функции SetScrollPos:

SetScrollPos(hwndScrol[i], SB_CTL, color[i], TRUE);

WndProc также изменяет текст дочернего окна под полосой прокрутки:

SetWindowText(hwndValue[i], _itot(color[i], szbuffer, 10));

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]