Обработка сообщений
Каждое получаемое окном сообщение идентифицируется номером, содержащемся в параметре iMsg оконной процедуры.
Для определения того, какое сообщение получила оконная процедура и как его обрабатывать, обычно используют оператор switch. Если оконная процедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0. Все сообщения, не обрабатываемые оконной процедурой, передаются функции DefWindowProc, результат которой должен быть возвращаемым значением оконной процедуры.
Функция WndProc обрабатывает два сообщения WM_PAINT и WM_DESTROY, а функция DefWindowProcобрабатывает (по умолчанию) все сообщения, не обработанные оконной процедурой.
Сообщение WM_PAINT
Сообщение WM_PAINT – передает программе, что часть или вся рабочая область окна недействительна (invalid) и ее следует перерисовать.
При первом создании окна недействительна вся рабочая зона и сообщение WM_PAINT заставляет оконную процедуру рисовать в рабочей области, что происходит также и при изменении размера окна.
Обработка сообщения WM_PAINT почти всегда начинается вызовом:
hdc = BeginPaint (hwnd, &ps);
и заканчивается функцией
EndPaint (hwnd, &ps);
первый параметр в обеих функциях – описатель окна, второй – указатель на структуру типа PAINTSTRUCT, в которой содержится информация, необходимая оконной процедуре для рисования в рабочей области.
При обработке вызова BeginPaint обновляется фон рабочей области, заданной кистью; вся рабочая область становится действительной и возвращается описатель контекста устройства, описывающий физическое устройство вывода информации (дисплей) и его драйвер.
Функция EndPaint освобождает описатель контекста устройства, после чего его значение нельзя использовать.
Для определения размера рабочей области окна вызывается функция
GetClientRect (hwnd, &rect);
параметр rect – структура типа RECT (rectangle – прямоугольник), содержащая четыре поля типа LONG (left – левое, top – верх, right – правое, bottom – низ), в которые помещаются размеры рабочей области окна; поля left, top всегда устанавливаются в 0, поля right, bottom – ширина и высота рабочей области в пикселях.
Структура rect используется в качестве четвертого параметра функции отображения текста:
DrawText (hdc, "Hello, Windows !", –1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
второй параметр – отображаемый текст; третий параметр (–1) указывает, что строка текста заканчивается нулевым символом; последний параметр – набор флагов, значения которых указывают, что текст следует выводить в одну строку, по центру прямоугольной области размером, заданным в rect. Вызов этой функции отображает строку «Hello, Windows!» в центре рабочей области созданного окна.
Дата добавления: 2016-01-09; просмотров: 445;