- •Часть 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. Панель для выбора шрифта
5.1.3. Функция окна диалоговой панели
Функция окна диалоговой панели описывается разработчиком и должна быть объявлена следующим образом:
BOOL CALLBACK DlgProc(HWND hdlg, UINT msg,
WPARAM wParam, LPARAM Iparam);
На имя этой функции распространяют обычные требования на имена функций. Список формальных параметров подобен списку параметров функции окна. Только через первый параметр передают дескриптор диалогового окна hdlg, а не обычного окна hwnd.
Функция окна диалоговой панели не содержит вызов функции DefWindowProc для тех сообщений, которые она не обрабатывает. Если эта функция обрабатывает сообщение, то должна вернуть значение TRUE, а если нет – FALSE. Исключением является только возврат после обработки сообщения WM_INITDIALOG (см. ниже).
Функция окна диалоговой панели не обрабатывает сообщения WM_CREATE, WM_PAINT и WM_DESTROY
Функция окна диалога получает сообщение WM_INITDIALOG непосредственно перед отображением панели. При обработке этого сообщения инициализируют переменные для работы с данными и органы управления панели.
Параметр wParam при этом равен дескриптору органа управления, который получит фокус ввода сразу после отображения панели. Это первый незаблокированный орган управления, описанный в шаблоне панели со стилем WM_TABSTOP. Если при обработке этого сообщения фокус ввода не передают другому органу, возвращают значение TRUE. Если фокус ввода передают другому органу управления, возвращают значениe FALSE.
Параметр lParam содержит значение, передаваемое приложением при создании диалоговой панели. Обычно этот параметр указывает на дополнительные данные для диалоговой панели.
В функцию окна диалога сообщение WM_COMMAND поступает от органов управления панели. При этом младшее слово параметра wParam содержит идентификатор пославшего сообщение органа управления.
Нужно осторожно обрабатывать сообщение WM_COMMAND с идентификатором IDОК или IDCANCEL.
Функция окна диалога получает сообщение WM_COMMAND с идентификатором IDOK, если клавиша Enter нажата в момент, когда ни одна из кнопок панели не имеет фокуса ввода. Это справедливо для двух различных ситуаций:
-
Ни одна из кнопок не имеет стиль WS_DEFPUSHBUTTON.
-
Одна из кнопок создана со стилем WS_DEFPUSHBUTTON и идентификатором IDOK.
Функция окна диалога получает сообщение WM_COMMAND с идентификатором IDCANCEL, если нажата клавиша Esc или нажата кнопка с идентификатором IDCANCEL.
П. 5.2. Создание диалоговой панели
Диалоговые панели - это окна определенного операционной системой класса окон. Существуют специальные функции для создания диалоговых панелей на базе этого класса и для их создания не вызывают функцию CreateWindow.
Создание и работа с диалоговыми панелями предполагает следующие шаги:
1. Описание шаблона диалоговой панели.
2. Описание функции окна диалоговой панели.
3. Вызов функции создания диалоговой панели.
4. Обмен данными между функцией окна, вызвавшего диалоговую панель, и функцией окна диалоговой панели.
Наиболее трудоемкими являются описание шаблона и функции окна диалоговой панели. А наибольшую сложность представляет реализация обмена данными между функцией окна, создавшего диалоговую панель, и функцией окна диалоговой панели. Сложность обусловлена тем, что полученные в теле функции окна панели данные разрушаются при разрушении диалоговой панели. Для решения этой задачи описывают глобальные объекты, которые принимают значения данных панели и сохраняют их после ее разрушения.