Окт 13

Создание окна

Если регистрация класса окна прошла успешно, то следующий этап — создание окна.
Рассматривая назначение параметров, не будем забывать, что функция Create Window позволяет создавать не только основное окно приложения, но и любые другие окна, включая окна предопределенных классов, с помощью которых реализуются стандартные элементы управления Windows.
Первый параметр, IpQassName, — это указатель на строку, содержащую допустимое имя класса окна. Таким именем может быть либо имя класса, зарегистрированного ранее при помощи функции RegisterClassEx или RegisterClass, либо имя одного из предопределенных классов.
Второй параметр, LpWindowName, — это указатель на строку, содержащую имя окна. Место отображения имени зависит от вида окна. Например, для главного окна приложения оно выводится как заголовок окна, а для окна предопределенного класса BUTTON размещается по центру кнопки.
Третий параметр, dwStyle, позволяет указывать стиль окна.
Четвертый параметр, х, задает горизонтальную позицию левого верхнего угла окна. Для главного окна позиции х и у определяются в экранных координатах, а для дочерних окон и элементов управления координаты отсчитываются относительно левого верхнего угла родительского окна.
Если позиция х не важна, то можно установить значение CW_USEDEFAULT. В этом случае Windows использует значения х и у по умолчанию. Это означает, что система располагает следующие друг за другом перекрывающиеся окна, равномерно отступая по горизонтали и вертикали от левого верхнего угла экрана.
Пятый параметр, у, задает вертикальную позицию левого верхнего угла окна. Если параметр х имеет значение CWJJSEDEFAULT, то значение параметра у игнорируется.
Шестой параметр, пWidth, задает ширину окна в пикселах. Если ему присвоено значение CWJJSEDEFAULT, то система будет использовать значения nWidth и nHight по умолчанию.
Седьмой параметр, nHight, задает высоту окна в пикселах. Если параметр nWidth установлен в CWJJSEDEFAULT, то значение nHight игнорируется.
Восьмой параметр, hWnd Parent, в рассматриваемой программе имеет значение NULL, поскольку у главного окна программы отсутствует родительское окно. Заметим, что, если между двумя окнами существует связь типа родительское — дочернее, дочернее окно всегда появляется только на поверхности родительского.
Девятый параметр, hMenu, содержит дескриптор меню окна или идентификатор элемента управления. Интерпретация значения параметра зависит от вида окна.
Если приложение использует меню, определенное в классе окна (поле IpszMenu-Name в структуре WNDCLASSEX), то параметру hMenu необходимо передать значение NULL
Если создаваемое окно относится к элементу управления, то параметру hMenu передается целочисленное значение, которое далее используется как идентификатор созданного элемента. Этот идентификатор, например, будет содержаться в сообщениях WMJZOMMAND, поступающих от элемента управления.
Десятому параметру, hlnstance, должен быть присвоен дескриптор экземпляра приложения, переданный программе в качестве аргумента функции WinMain.
Последний параметр, IParam, в рассматриваемом примере тоже имеет значение NULL. При необходимости он может быть использован в качестве указателя на некие дополнительные данные, передаваемые окну в момент его создания с помощью сообщения WM JIREATE.
Итак, функция CreateWindow вызвана. Отработав, она возвращает дескриптор созданного окна. Если по какой-то причине создать окно не удалось, то функция возвращает значение NULL Поэтому рекомендуется проверять возвращаемое функцией значение и в случае неудачи выдавать соответствующее сообщение, используя уже знакомую функцию MessageBox.