- •Часть 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. Панель для выбора шрифта
П. 1.8 Классы окон
Когда программа для Windows начинает исполняться, ей требуется определить и зарегистрировать класс окна. Для создания окна операционной системе указывают, к какому классу оно принадлежит. Если к моменту создания окна операционной системе известен класс создаваемого окна (например, это определенный в системе или зарегистрированный текущим или другим приложением класс), то можно воспользоваться именем этого класса. Иначе нужно создать новый класс (описать функцию окна и набор используемых ресурсов) и зарегистрировать его.
1.8.1. Описание используемых классом окон ресурсов
Набор используемых ресурсов класса задают в структуре типа WNDCLASS. Эта структура описана следующим образом:
typedef struct
{ UINT style;
WNDPROC IpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hinstance;
HICON hicon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR IpszMenuName;
LPCTSTR IpszClassName;
} WNDCLASS;
Например, если описана структура этого типа:
WNDCLASS wс;
то присваивают определенные значения ее полям. Назначение полей этой структуры:
1. style принимает значения из табл. 1. Например:
wc-style = CS_HREDRAW | CS..VREDRAW | CS_DBLCLKS;
2. IpfnWndProc указывает на функцию окна.
3. cbClsExtra равно количеству дополнительных байт класса.
4. cbWndExtra равно количеству дополнительных байт окна этого класса.
5. hInstance указывает на дескриптор текущего приложения.
6. hIcon указывает на имя пиктограммы (иконки), в которую превращается окно при минимизации. Ресурс иконки загружают функцией Loadlcon:
HICON Loadlcon( HINSTANCE hinst, LPCTSTR IplconName);
Параметр lpIconName указывает на строку с именем загружаемой иконки, а hinst - дескриптор приложения, чей исполняемый код содержит загружаемый ресурс. Для загрузки стандартной иконки hinst приравнивают NULL, а в качестве lpIconName задают одно из значений табл. 2. Например, следующий оператор устанавливает стандартную пиктограмму окна приложения:
wc.hlcon = Loadlcon( NULL, IDI_APPLICATION );
В случае аварийного завершения функция возвращает NULL и при сворачивании окон этого класса операционная система в качестве иконки использует логотип Windows.
7. hCursor задает вид курсора мыши при его прохождении над окном. Ресурс курсора загружают функцией LoadCursor:
HCURSOR LoadCursor( HINSTANCE hinst, LPCTSTR IpCursorName);
Параметр lpCursorName указывает на строку с именем загружаемого ресурса, а hinst - дескриптор приложения, чей исполняемый код содержит загружаемый ресурс. Для загрузки стандартного курсора hinst приравнивают NULL, а в качестве lpCursorName задают одно из значений табл. 3. Например, следующий оператор задает курсор в виде стандартной стрелки:
wc.hCursor= LoadCursor(NULL, IDC_ARROW);
В случае аварийного завершения функция возвращает NULL и окно будет заимствовать курсор предшествующего по движению мыши окна.
Функции LoadIcon и LoadCursor загружают ресурс иконки или курсора, только если ресурс не был загружен; иначе выбирают дескриптор загруженного ресурса.
8. hbrBackground задает дескриптор кисти закрашивания фона окна. В качестве кисти можно использовать "чистые" цвета или пиктограмму. Чаще используют значение системного цвета (табл. 4.) плюс 1. Цвета преобразуют в тип HBRUSH. Например, следующий оператор устанавливает системный цвет закрашивания фона:
wc.hbrBackground = (HBRUSH)(COLORWINDOW+1);
Система сама удаляет кисть фона при освобождении класса. Если указать NULL, то приложение само должно красить фон окон.
9. IpszMenuNaine указывает на имя ресурса главного меню окон этого класса. Если задать NULL, окна этого класса не имеют заданного по умолчанию меню. Например:
wc.lpszMenuName = (LPCTSTR)NULL;
10. IpszClassName указывает на текстовую строку, содержащую имя регистрируемого класса окон, например:
wc-lpszClassName = szName;