Вторая часть Windows программы – оконная процедура (функция окна). ОС Windows САМА вызывает ее при обработке сообщений, предназначенных для данного окна.
ВСЕ сообщения передаются в функцию окна, но не на все сообщения мы обязаны реагировать. Если в приложении планируется обрабатывать конкретное сообщение, то оно включается в оператор switch. Остальные сообщения обрабатываются по умолчанию. Для этого их пересылают на обработку в функцию DefWindowProc.
Только одно сообщение мы всегда обязаны перехватывать. Это WM_DESTROY, посылаемое самой Windows в тот момент, когда пользователь закрывает окно (нажимая кнопку закрытия в заголовке окна). Стандартный ответ на WM_DESTROY заключается в вызове функции PostQuitMessage(0). Это соответствует посылке сообщения о выходе из программы со значением нуля в качестве кода возврата.
В качестве параметров функции окна будут передаваться дескриптор текущего окна, код сообщения и его параметры (wParam и lParam). Мы эту функцию НЕ ВЫЗЫВАЕМ.
Вся функция окна в простейшем случае это оператор switch, который анализирует идентификатор сообщений (переменная message), например:
|
|
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: добавьте любой код отрисовки...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
Если тип сообщения не встретился, то такое сообщение отправляется на обработку по умолчанию в функцию DefWindowProc
Работа с окнами
Чтобы создать окно надо:
1. Зарегистрировать класс окна, указав там стиль (собственный или зарегистрированный в Windows) – стиль класса (поле ws.style). Так мы зададим общие свойства окон данного класса.
2. На базе этого класса создать окно (использовать функцию CreateWindow), указав при этом стиль окна. Это уточнение вида и поведения окон.
3. Отобразить окно (использовать функцию ShowWindow).
Стили класса окна
Всего существует 13 констант, задающих стиль окна. Они начинаются с перфикса CS_. Стиль задается константами через битовую операцию «или» (|). Используется в CreateWindow первым параметром.
Таблица 7