Окт 13

Регистрация класса окна

Сразу после входа в функцию WinMain создается и регистрируется класс главного окна приложения. Для этого необходимо заполнить структуру типа WNDCLASSEX, а затем передать адрес этой структуры в виде аргумента функции RegisterClassEx.
В заголовочных файлах Windows идентификаторы, начинающиеся с префикса CS_, задаются в виде 32-разрядной константы, в которой только один разряд установлен в единичное значение. Например, константа CS_VREDRAW задана как 0x0001, a CS_HREDRAW — как 0x0002. Подобные константы иногда называют поразрядными флагами (bit flags). Они могут объединяться с помощью операции ИЛИ языка C++.
В рассматриваемой программе используется комбинация стилей CS_HREDRAW | CS_VREDRAW. Это означает, что все окна этого класса должны целиком перерисовываться при изменении как горизонтального, так и вертикального размеров окна. Если попробовать изменить размеры окна A Hellol Application, то можно увидеть, что строка текста переместится в новый центр окна. Механизм уведомления оконной процедуры об изменении размеров окна будет рассмотрен позже.
Третье поле, IpfnWndProc, содержит адрес оконной процедуры (в нашей программе это — WndProc).
Назначение полей 4 — 6 представляется очевидным1.
Седьмое поле, hlcon, содержит дескриптор пиктограммы, которая предназначена для этого класса окна. Пиктограмма (синонимы: иконка, значок) — это маленькая битовая картинка, которая появляется на панели задач Windows и в левой части заголовка окна. Значение hlcon обычно получают вызовом функции Loadlcon, которая имеет следующий прототип:
HICON LoadlconCHINSTANCE hlnstance, LPCTSTR IpIconName);
Эта функция загружает ресурс пиктограммы, заданный параметром IpIconName, из экземпляра приложения, указанного параметром hlnstance2. Функцию можно использовать также для загрузки одной из системных (предопределенных) пиктограмм, если передать первому аргументу значение NULL. В этом случае второй аргумент должен содержать константу, идентификатор которой начинается с префикса IDI_ («идентификатор значка» — ID for icon).