
- •Основные компоненты windows – программы (.Cpp, .H, .Res, .Rc, .Def), компиляция.
- •Файл определения модуля.
- •Структура windows – программы.
- •Структура программы в Windows:
- •Сообщения. Источники сообщений
- •Формирование сообщений, примеры. Очереди.
- •Сообщения. Цикл сообщений, основные компоненты.
- •Сообщения. Структура сообщений на примере wm_command
- •Структура msg. Обработка сообщений.
- •Средства обработки сообщений в приложении и windows.
- •Окна, классы и типы окон.
- •Регистрация класса окна, основные элементы класса.
- •Int cbClsExtra; // 3. Доп. Память для окон, созд-мых на базе данного класса
- •Int cbWndExtra; // 4. Доп. Память для создания окна (3, 4 – в байтах)
- •Линейки прокрутки, переключатели, окна пометки, окна списка.
- •1. Кнопки, переключатели (переключатели – кнопки с 3-мя состояниями (вкл, выкл и неактивен)
- •2. Полосы прокрутки.
- •3. Окна списка
- •Комбинированные списки, окна редактирования и статические текстовые объекты.
- •1. Комбинированные списки
- •2. Окна редактирования
- •3. Статический орган управления (статический текстовый объект)
- •Способы создания меню
- •Создание меню в файле ресурсов
- •С помощью функций в теле программы
- •Создание меню редактором ресурсов
- •Определение диалоговой панели, взаимодействие пользователя с панелью.
- •1. Создание шаблона.
- •2. Создание функции диалога.
- •3. Вызов одной из функций создания диалога
- •Диалоговые панели, модальные панели.
- •Немодальные панели. Отличие циклов сообщений.
- •Ресурсы. Файл ресурсов, текстовый, бинарный. Создание.
- •Файл определения модуля. Назначение, основные директивы (относящиеся к коду и данным).
- •Графический приборный интерфейс gdi. Состав, назначение.
- •Контекст, содержание контекста.
- •Общий контекст, родительский, личный, для класса окна, физический.
- •1. Общий контекст отображения.
- •2. Контекст отображения для класса окна
- •3. Личный контекст отображения
- •4. Родительский контекст отображения
- •5. Контекст физического устройства
- •Последовательность действий приложения при формировании рисунка
- •Преобразование логических координат в физические и наоборот, единицы измерений, масштабирование.
- •Назначение и состав структуры paintstruct. Сообщение wm_paint.
- •Int right; х-коор-та нижнего правого угла
- •Int bottom; y-коор-та
- •Дополнительные темы.
- •Аппаратная независимость
- •Основные компоненты windows – программы (.Cpp, .H, .Res, .Rc, .Def), компиляция
Структура msg. Обработка сообщений.
Для временного хранения сообщений в Windows используется структура типа MSG. Переменная этого типа, в частности, используется в цикле обработки сообщения (здесь сообщений хранится до окончания обработки).
В файле windows.h структура MSG описана следующим образом:
typedef struct tagMSG
{
HWND hwnd; // Дескриптор приложения, которому отправлено сообщение
UINT message; // Номер (идентификатор) сообщения (какое сообщение послано)
WPARAM wParam; // Информационные поля -
LPARAM lParam; // содержат информацию. Какое событие произошло
DWORD time; // Время от запуска ОС до постановки в системную очередь сообщения
POINT pt; // Указатель на структуру с двумя полями x, y – координаты мыши
} MSG;
Обработка сообщений
В Windows-приложении для обработки сообщений создается специальная функция:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ // Идентификатор сообщения передается через параметр msg
wParam и lParam –информационные поля сообщения.
switch (msg)
{
case WM_DESTROY:
{ // Инициируем завершение работы приложения, помещая в очередь приложения сообщение WM_QUIT. Это приведет к завершению цикла обработки сообщений в функции WinMain
PostQuitMessage(0);
return 0;
}
default:
DefWindowProc(hwnd, msg, wParam, lParam);
// Все сообщения, которые не обрабатываются нашей функцией окна, ДОЛЖНЫ передаваться функции DefWindowProc
}
}
LRESULT – функция возвращает двойное слово.
CALLBACK – модификатор функции обратного вызова {передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове}
Функция WndProc НЕ ВЫЗЫВАЕТСЯ ни из одной функции приложения. Эту функцию вызывает Windows в процессе обработки сообщений. Для этого адрес функции WndProc указывается при регистрации класса окна. Функция выполняет обработку сообщений главного окна приложения.
В Windows также происходит обработка сообщений собственными обработчиками сообщений Windows по умолчанию.
Средства обработки сообщений в приложении и windows.
Обработка сообщений
В Windows-приложении для обработки сообщений создается специальная функция:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ // Идентификатор сообщения передается через параметр msg
wParam и lParam –информационные поля сообщения.
switch (msg)
{
case WM_DESTROY:
{ // Инициируем завершение работы приложения, помещая в очередь приложения сообщение WM_QUIT. Это приведет к завершению цикла обработки сообщений в функции WinMain
PostQuitMessage(0);
return 0;
}
default:
DefWindowProc(hwnd, msg, wParam, lParam);
// Все сообщения, которые не обрабатываются нашей функцией окна, ДОЛЖНЫ передаваться функции DefWindowProc
}
}
LRESULT – функция возвращает двойное слово.
CALLBACK – модификатор функции обратного вызова {передача исполняемого кода в качестве одного из параметров другого кода. Обратный вызов позволяет в функции исполнять код, который задаётся в аргументах при её вызове}
Функция WndProc НЕ ВЫЗЫВАЕТСЯ ни из одной функции приложения. Эту функцию вызывает Windows в процессе обработки сообщений. Для этого адрес функции WndProc указывается при регистрации класса окна. Функция выполняет обработку сообщений главного окна приложения.
В Windows также происходит обработка сообщений собственными обработчиками сообщений Windows по умолчанию.