- •Основные компоненты 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), компиляция
Сообщения. Источники сообщений
Сообщение - это извещение о некотором имевшем место событии, посылаемое системой Windows.
Основными генераторами сообщений являются внешние устройства - большинство сообщений создают драйверы устройств ввода/вывода, таких, как клавиатура, мышь или таймер при получении аппаратных прерываний.
Например, когда вы нажимаете и затем отпускаете клавишу, драйвер обрабатывает прерывания от клавиатуры и создает несколько сообщений. Аналогично сообщения создаются при перемещении мыши или в том случае, когда вы нажимаете кнопки на корпусе мыши. Также сообщение может быть послано или получено от другого пользователя или Windows.
Очередь сообщения приложений может пополняться не только из системной очереди. Любое приложение может послать сообщение любому другому сообщению, в том числе и само себе.
Сообщения имеют приоритет: у программных сообщений он выше, чем у аппаратных.
Сообщение, в основном, состоит из полей wParam и lParam, также имеет заголовок. В сообщении, формируемом при нажатии любой кнопки мыши, младшее слово lParam содержит X – координату курсора, а старшее – Y – координату. Семь младших бит поля wParam содержит состояние кнопок мыши и клавиш Shift и Ctrl. Если кнопка или клавиша нажата, то соответствующий бит находится в состоянии 1.
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Формирование сообщений, примеры. Очереди.
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Сообщение - это извещение о некотором имевшем место событии, посылаемое системой Windows – они информируют Windows или приложение, что произошло какое-то событие (например, произошло нажатие клавиши). Также сообщение может быть послано или получено от другого пользователя или Windows
Сообщения имеют приоритет: у программных сообщений он выше, чем у аппаратных.
В Win принята 2-х ступенчатая очередь обработки сообщений.
Прежде всего, сообщения попадают в системную очередь сообщений Windows. Системная очередь сообщений одна. {Для обработки сообщений существует флаг, получается 2 очереди сообщений – обычная и с флагами.}
Далее из нее сообщения распределяются в очереди сообщений приложений. Для каждого приложения создается своя очередь сообщений.
Очередь сообщения приложений может пополняться не только из системной очереди. Любое приложение может послать сообщение любому другому приложение, в том числе и само себе. Данного рода отправка сообщения осуществляется двумя функциями –
PostMessage(HWND hwnd (дескриптор, которому посылается сообщение), UINT MESSAGE (номер сообщения), WPARAM wParam, LPARAM lParam); - ставит в очередь приложения
SendMessage(--//--); - вызывает обработчик
Основная работа, которую должно выполнять приложение, заключается в обслуживании собственной очереди сообщений. Обычно приложение в цикле опрашивает свою очередь сообщений (каждая программа должна иметь функцию обработки сообщений). Обнаружив сообщение, приложение с помощью специальной функции из программного интерфейса Windows распределяет его нужной функции окна, которая и выполняет обработку сообщения.
Примеры сообщений:
При сообщении WM_LBUTTONDOWN появляется диалоговая панель с кнопкой ОК.
case WM_LBUTTONDOWN:
{
MessageBox(NULL,"Нажата левая клавиша мыши", "Сообщение", MB_OK);
return 0;
}
2. Инициируем завершение работы приложения, помещая в очередь приложения сообщение WM_QUIT. Это приведет к завершению цикла обработки сообщений в функции WinMain
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}