- •Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.
- •П. 1.2 Главная функция приложения WinMain().
- •П. 1.3 Оконная функция.
- •П. 1.4 Сообщения от окна
- •П. 1.5 Сообщения от мыши
- •1.5.1 Сообщения мыши, связанные с рабочей областью окна
- •1.5.3 Двойные щелчки мыши
- •1.5.4 Сообщения мыши, связанные с нерабочей областью окна
- •1.5.5 Захват мыши
- •П. 1.6 Сообщения от клавиатуры
- •1.6.1 Синхронизация событий клавиатуры
- •1.6.2 Игнорирование событий клавиатуры
- •1.6.3 Понятие фокуса ввода
- •1.6.4 Категории клавиатурных сообщений
- •1.6.5 Аппаратные сообщения
- •1.6.6 Символьные сообщения
- •П. 1.7 Таймеры Windows и служба времени.
- •П. 1.8 Классы окон
- •1.8.1. Описание используемых классом окон ресурсов
- •1.8.2. Регистрация класса окон
- •1.8.3. Создание окон
- •1.8.4. Стили окна
- •П. 1.9 Цикл обработки сообщений
- •П. 1.10 Структура текста приложения
- •П. 1.11 Вспомогательные функции создания окон
- •1.11.1 Функции отображения и перерисовки окон
- •1.11.2 Функции поиска и определения состояния окон
- •1.11.3 Функции перемещения окон
- •1.11.4 Сообщения приложения для пользователя
- •П. 1.12 Примеры создания окон
- •П 2. Органы управления
- •П 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.4 Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •П 2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •П. 2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •П 3. Вывод в окно
- •П. 3.1. Виды контекста отображения
- •П 3.2. Сообщение wm_paint
- •П 3.3. Установка атрибутов контекста отображения для текста
- •П 3.4. Вывод текста
- •3.4.1. Настройка параметров шрифта
- •3.4.2. Выбор шрифта в контекст отображения
- •3.4.3. Функции вывода текста
- •3.4.4. Определение метрик шрифта
- •П 3.5. Рисование геометрических фигур
- •3.5.1 Установка атрибутов контекста отображения для рисования.
- •3.5.1. Функции рисования точки
- •3.5.2. Функции рисования линий
- •3.5.3. Функции рисования замкнутых фигур
- •3.5.4 Функции создания и рисования регионов
- •П. 4 Ресурсы приложения и их использование. П. 4.1 Файл ресурсов.
- •П 4.2 Главное меню
- •П. 4.2.1 Элементы меню
- •П. 4.2.2 Создание меню
- •П. 4.2.3 Сообщения от меню
- •П. 4.3. Плавающее меню
- •П. 4.4. Акселераторы
- •П. 4.5. Панель инструментов
- •4.5.1. Создание панели инструментов
- •4.5.2. Управление состоянием кнопок панели
- •4.5.3. Вывод подсказок в панели инструментов
- •П. 4.6. Строка состояния
- •4.6.1. Создание строки состояния
- •4.6.2. Сообщения о меню в строке состояний
- •П 5. Диалоговые панели п. 5.1. Характеристики диалоговых панелей
- •5.1.1. Единицы диалоговой панели '
- •5.1.2. Стили диалоговой панели
- •5.1.3. Функция окна диалоговой панели
- •П. 5.2. Создание диалоговой панели
- •5.2.1 Создание окна модальной диалоговой панели
- •5.2.2 Создание окна немодальной диалоговой панели
- •П. 5.3 Разработка и компоновка диалоговых панелей.
- •П. 5.4 Сообщения и диалоговые панели
- •П. 5.5. Стандартные диалоговые панели
- •5.5.1. Панели для открытия или сохранения файлов
- •5.5.2. Панель для выбора цветов
- •5.5.3. Панель для выбора шрифта
3.5.3. Функции рисования замкнутых фигур
Функции рисования замкнутых фигур строят закрашенные или незакрашенные фигуры, такие, как прямоугольники, эллипсы, многоугольники с прямыми и скругленными углами и т. д. Для закрашивания внутренней области замкнутых фигур используют кисть контекста отображения. Внешний контур фигуры обводят пером контекста отображения. Учитывают и остальные атрибуты отображения. В зависимости от стиля пера граница фигуры может находиться полностью внутри заданного внешнего контура или выходить за его пределы. Если выбрать стиль пера PS_NULL, контур станет невидимым.
Для рисования прямоугольника вызывают функцию Rectangle:
BOOL Rectangle( HDC hdc, int I, int t, int r, int b);
Параметры 1, t, r и b определяют логические координаты соответственно левого, верхнего, правого и нижнего краев прямоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Функция RoundRect рисует прямоугольник с закругленными углами:
BOOL RoundRect( HDC hdc, int I, int t, int r, int b, int w, int h);
Первые 5 параметров этой функции совпадают с параметрами функции Rectangle. А параметры w и h задают соответственно ширину и высоту эллипса, дуги которого закругляют углы прямоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Функция FillRect закрашивает прямоугольную область окна заданной кистью:
int FillRect( HDC hdc, CONST RECT 1prc, HBRUSH hbr);
Параметр lprc указывает на закрашиваемый прямоугольник. Параметр hbr идентифицирует кисть закрашивания, может быть дескриптором логической кисти или значением системного цвета. Например: FiilRect( hdc, &rect, (HBRUSH)(COLOR_WINDOW+1));
Правая и нижняя границы прямоугольника не закрашиваются. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Функция FrameRect рисует прямоугольную рамку:
int FrameRect( HDC hdc, CONST RECT *lprc, HBRUSH hbr);
Параметры этой функции подобны параметрам функции FillRect. Функция FrameRect кистью hbr рисует рамку вокруг заданного прямоугольника. Ширина пера, используемого для рисования рамки, всегда равна одной логической единице. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Функция InvertRect инвертирует значения цветов точек заданной прямоугольной области lprc:
BOOL InvertRect (HDC hdc, CONST RECT *lprc);
В случае успешного выполнения функция возвращает ненулевое значение. Для восстановления цветов еще раз вызывают эту функцию.
Следующая функция пунктиром обозначает границы заданной прямоугольной области lprc:
BOOL DrawFocusRect( HDC hdc, CONST RECT *lprc);
Пунктирные линии строятся с использованием растровой операции ИСКЛЮЧАЮЩЕЕ ИЛИ цветов точек, лежащих на границе прямо-
угольника. Вызывая эту функцию второй раз, можно удалить выделение прямоугольника. При прокрутке содержимого окна выделенная граница остается на месте. Для этой функции не нужно выбирать перо, рисующее пунктирную линию. Перед вызовом функции DrawFocusRect устанавливают режим отображения MM_TEXT.
Для рисования эллипса используют функцию Ellipse:
BOOL Ellipse( HDC hdc, int I, int t, int r, int b);
Параметры функции Ellipse идентичны первым пяти параметрам функции Arc. B случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Сегмент эллипса рисуют при помощи функцииСhord:
BOOL Chord(HDC hdc, int I, int t, int г, int b, int xO, int yO, int x, int у);
Параметры этой функции аналогичны параметрам функции Arc.
В отличие от функции Arc, функция Chord соединяет хордой точки начала и конца дуги эллипса и закрашивает выделенный таким образом сегмент текущей кистью. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Для рисования сектора эллипса используют функцию Pie:
BOOL Pie(HDC hdc, int I, int t, int r, int b, int xO, int yO, int x, int у);
Параметры этой функции аналогичны параметрам функций Arc и Chord. В отличие от функции Chord, функция Pie соединяет точки начала и конца дуги с центром эллипса и закрашивает выделенный таким образом сектор текущей кистью. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.
Функция Polygon рисует многоугольник:
BOOL Polygon(HDC hdc, CONST POINT *lpPoints, int nCount);
Параметр lpPoints указывает на массив структур POWT, в котором находятся координаты вершин многоугольника. Параметр nCount равен размеру этого массива. В массиве каждая вершина должна быть указана только один раз. Функция Polygon автоматически соединяет первую и последнюю вершины многоугольника. В случае успешного выполнения функция возвращает ненулевое значение. Функция игнорирует текущую позицию.