Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab2.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
964.1 Кб
Скачать

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

Когда класс окна определен и зарегистрирован, приложение может создать окно с помощью API-функции CreateWindow(), которая имеет следующий прототип.

HWND CreateWindow(

LPCSTR IpszClassName, /* имя класса окна */ LPCSTR LPCSTR IpszWinName, /* заголовок окна */

DWORD dwStyle, /* тип окна */

int X, int Y, /* координаты верхнего левого угла */

int Width, int Height, /* размеры окна */

HWND hParent, /* дескриптор родительского окна */

HMENU hMenu, /* дескриптор главного меню */

HINSTANCE hThisInst, /* дескриптор программы, создающей окно*/

LPVOID IpszAdditional /* указатель на дополнительную */

/* информацию */

);

Из текста программы видно, что большинство параметров функции могут быть заданы по умолчанию или определены как NULL. Например, для параметров X,Y, Width и Height чаще всего используется константа CW_USEDEFAULT, которая указывает на то, что Windows 95 сама выберет требуемый размер окна и его расположение на экране. Если окно не имеет родительского окна, как в данном примере, то в параметре hParent необходимо указать константу HWND_DESKTOP (или NULL). Если окно не содержит главного меню, то параметр hMenu должен равняться NULL. Если никакая дополнительная информация для создания окна не требуется (а так чаще всего и бывает), то параметр lpszAdditional также должна равняться NULL. Тип LPVOID определен с помощью typedef-декларации, как void. Исторически, тип LPVOID обозначает длинный указатель на void.

Оставшиеся четыре параметра должны быть заданы явно. Первый из lpszClassName, должен указывать на имя класса окна. Это имя было присвоено классу при регистрации. Заголовок окна содержится в строке, на которую указывает параметр lpszWinName. Это может быть и пустая строка, но обычно окну дается заголовок. Стиль (или тип) создаваемого окна задается значением параметра dwStyle. Константа WS_OVERLAPPEDWINDOW определяет стандартное окно, в котором имеется системное меню, рамка, кнопки минимизации, максимизации и закрытия. Хотя этот стиль является наиболее общим, можно определить другой стиль по собственным критериям. Для этого достаточно с помощью операции побитового ИЛИ объединить несколько констант. Наиболее часто используемые константы приведены в табл. 2.4.

Таблица 2.4. Стили масштабируемых окон

Константа стиля

Элемент окна

WS_OVERLAPPED

Стандартное окно с рамкой

WS_MAXIMIZEBOX

Кнопка максимизации

WS_MINIMIZEBOX

Кнопка минимизации

WS_SYSMENU

Системное меню

WS_HSCROLL

Горизонтальная полоса прокрутки

WS_VSCROLL

Вертикальная полоса прокрутки

Параметр hThislnst должен содержать дескриптор текущего экземпляра приложения. Функция CreateWindow() возвращает дескриптор создаваемого окна или NULL, если окно не может быть создано.

Хотя окно создано, оно еще не отображено на экране. Для этого необходимо вызвать API-функцию ShowWindow(), которая имеет такой прототип:

BOOL ShowWindow(HWND hwnd, int nHow) ;

Дескриптор отображаемого окна указывается в параметре hwnd. Режим отобра­жения задается параметром nHow. При первом отображении окна необходимо в качестве данного параметра указать пapaметр nWinMode функции WinMain(). Пом­ните, что этот параметр определяет способ отображения окна при создании програм­мы. При последующих вызовах функции можно отображать окно в других режимах или закрывать его в случае необходимости. Ниже приведены наиболее распростра­ненные значения параметра nHow (табл. 2.5):

Таблица 2.5. Константы отображения

Константа отображения

Действие

SW_HIDE

Окно закрывается

SW_MAXIMIZE

Окно раскрывается на весь экран

SW_MINIMIZE

Окно сворачивается в пиктограмму

SW_RESTORE

Окно приводится к нормальному размеру

Функция ShowWindow() возвращает признак предыдущего состояния окна. Если оно было на экране, то результат ненулевой, в противном случае значением функции будет ноль.

Хотя с технической точки зрения в данной программе нет необходимости вызывать функцию UpdateWindow(), ее вызов все же присутствует, потому что данная функция используется в большинстве приложений для Windows 95. Фактически, она указывает Windows 95 на необходимость послать программе сообщение WM_PAINT.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]