- •Часть 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. Панель для выбора шрифта
Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.
Программы для Windows не столь широко используют стандартные типы данных С++, такие как int или char. Вместо этого все используемые Windows типы данных определены с помощью typedef в файле windows.h или в соответствующих файлах. Этот файл должен быть включен во все программы Windows.
Рассмотрим некоторые наиболее употребительные типы:
HANDLE - 32-битное целое, используемое в качестве дескриптора.
Дескриптор – это величина, которая используется в качестве идентификатора какого-то ресурса. Все типы дескрипторов начинаются с буквы Н.
Например:
HWND -32-битное целое, используемое в качестве дескриптора окна.
HPEN -32-битное целое, используемое в качестве дескриптора пера.
HBRUSH -32-битное целое, используемое в качестве дескриптора кисти.
WORD -16-битное беззаковое короткое целое.
typedef usigned int UINT -32-битное беззнаковое целое.
LONG - является другим именем long.
BOOL -целый тип. Используется для того, чтобы различать значения истино и ложно.
typedef UINT WPARAM
typedef LONG LPARAM
LPSTR -указатель на строку
LPCSTR -константный указатель на строку.
Кроме этих основных типов Windows определяет несколько структур. Например:
MSG -содержит сообщения Windows.
WNDCLASS -определяет класс окна.
П. 1.2 Главная функция приложения WinMain().
Каждое приложение Windows начинается с вызова функции WinMain(). Она получает управление при запуске приложения, выполняет присущие обычным функциям действия, регистрирует классы окон, создает окна, опрашивает очередь сообщений и распределяет свои сообщения.
Пример описания функции WinMain:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevlnstance, LPSTR IpszCmdLine, int nCmdShow)
{
. . .
}
Имя, тип возврата и список формальных параметров функции определены требованиями Windows API. Модификатор WINAPI указывает на то, что функция при получении аргументов сама должна откорректировать порядок расположения аргументов в стеке.
Параметр hinstance от операционной системы получает дескриптор текущего экземпляра приложения. Параметр hPrevInstance в 16-разрядных приложениях указывает на активный предыдущий экземпляр приложения или NULL. В приложениях Win32 он всегда равен NULL и по нему невозможно узнать о существовании других активных экземпляров этого приложения. Параметр lpszCmdLine указывает на строку с аргументами командной строки запуска приложения. При обычном запуске этот параметр равен NULL. Параметр nCmdShow передает приложению способ начального отображения окна.
П. 1.3 Оконная функция.
Функция окна описывает реакцию окна на поступающие сообщения. Она от обычных функций отличается следующим:
• имеет стандартные тип возврата и список формальных параметров;
• вызывается только операционной системой при поступлении сообщения окну;
• сообщения, которые не обрабатываются функцией окна, возвращаются операционной системе.
Имя функции окна - это обычное имя, определяемое разработчиком.
Рассмотрим пример описания функции окна.
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch (msg) //Обработка сообщения
{ case WM_CREATE: { ...; return 0;}
case WM_MOVE: { . . .; return 0;}
case WM_SIZE: { . . .; return 0; }
. . .
caseWM.DESTROY:
{ ...; PostQuitMessage(O); return 0;}
} return DefWindowProc(hwnd, msg, wParam, IParam);
}
Заголовок функции окна определен соглашениями Windows и имеет вид:
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,
WPARAM wParam, LPARAM IParam)
Тип возврата LRESULT равноценен типу signed long. Модификатор CALLBACK указывает на соглашения о том, что эта функция вызывается операционной системой (такие функции называют функциями обратного вызова).
Параметр hwnd - дескриптор окна-адресата, а msg, wParam и lParam описывают полученное сообщение. Параметр msg принимает код сообщения. Содержимое переменных wParam и lParam определяется полученным сообщением. Обычно они содержат такие вещи как координаты мыши, значение клавиши, размер символа и др. Иногда две порции информации кодируется в двойное слово, из которых состоит каждое из параметров wParam и lParam. Для того, чтобы обеспечить легкий доступ к каждой половинке wParam и lParam Windows определяет два макроса с именами LOWORD и HIWORD. Они возвращают младшее и старшее слово длинного целого соответственно.