Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП01_Окна_Создание приложения Win32.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
486.4 Кб
Скачать

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

Для создания окна вызывают функцию CreateWindow. Она создает перекрывающееся, временное или дочернее окно и устанавливает начальные значения некоторых его параметров. Эта функция объявлена следующим образом:

HWND CreateWindow(

LPCTSTR lpClassName, //Указатель на имя класса

LPCTSTR lpWindowName, //Указатель на имя окна

DWORD dwStyle, //Стиль окна

int x, //Координата левого края окна

int У, //Координата верхнего края окна

int nWidth, //Ширина окна

int nHeight, //Высота окна

HWND hWndParent, //Дескриптор окна-родителя или

//окна-владельца

HMENU hMenu, //Дескриптор меню или идентификатор

//создаваемого дочернего окна

HANDLE hInstance, //Дескриптор приложения

LPVOID lpParam //Указатель на данные окна

);

Назначение аргументов вызова этой функции:

  1. lpClassName указывает на имя зарегистрированного функцией RegisterClass или определенного операционной системой класса.

  2. lpWindowName указывает на строку, содержащую имя создаваемого окна.

  3. dwStyle задает стиль окна. Стиль окон будет отдельно рассмотрен ниже.

  4. х – координата левого края окна в пикселях. Для перекрывающихся или временных окон х отсчитывают от левого края экрана, дочерних окон – от левого края рабочей области родительского окна. Если для перекрывающегося окна со стилем WS_VISIBLE в качестве х задать константу CW_USEDEFAULT, Windows устанавливает не обязательно нулевую позицию по умолчанию для левого верхнего угла окна и игнорирует координату y верхнего края окна. Для временного и дочернего окна такая позиция по умолчанию равна (0, 0).

  5. y – координата верхнего края окна в пикселях. Для перекрывающихся и временных окон ее отсчитывают от верхнего края экрана, дочерних окон – от верхнего края рабочей области родительского окна.

  6. nWidth – ширина окна в пикселях. Для перекрывающихся окон можно задать равной CW_USEDEFAULT. В этом случае система устанавливает ненулевые значения ширины и высоты по умолчанию и игнорирует заданную высоту nHeight окна. Ширина и высота временного и дочернего окна по умолчанию равны нулю.

  7. hWndParent может указывать только на инициированное окно. Дескриптор окна-родителя обязательно указывают при создании дочернего окна. Дескриптор окна-владельца для временного окна указывать необязательно.

  8. hMenu – дескриптор меню или идентификатор создаваемого дочернего окна.

Меню перекрывающегося или временного окна можно задать тремя способами:

  1. в классе окон указывают имя меню, и все окна этого класса могут пользоваться этим меню;

  2. имя меню указывают как аргумент функции CreateWindow, и создаваемое окно будет пользоваться этим меню, игнорируя меню класса;

  3. меню создают в процессе или после создания окна.

В первом и третьем случаях аргумент hMenu равен NULL. Если создается дочернее окно, то аргументом hMenu задают идентификатор этого окна (целочисленную константу).

Перед созданием окна функция CreateWindow посылает код сообщения WM_CREATE функции создаваемого окна. Она затем обрабатывает возвращаемое функцией окна значение и создает окно, если это значение равно 0, или не создает окна, если значение равно -1. Соответственно функция CreateWindow возвращает дескриптор созданного окна или NULL.

Стиль окна задает внешнее поведение окна.

Для описания стиля окна используют символические константы с префиксом WS_ (табл. 1.5).

По совокупности свойств различают перекрывающиеся (overlapped), временные (pop-up) и дочерние (child) окна.

Перекрывающиеся окна чаще используют в качестве окон приложения. Они всегда имеют заголовок (title bar), рамку и рабочую область окна (client region), могут иметь системное меню, кнопки восстановления размеров, закрытия и сворачивания окна в пиктограмму, горизонтальную и вертикальную полосы просмотра (scroll bar), меню, панель инструментов (tool bar) и строку состояния (status bar) (см. рис. 1.1). Базовый стиль таких окон описан константой WS_OVERLAPPED. Чаще используемый стиль окон WS_OVERLAPPEDWINDOW вдобавок к базовому указывает, что окно имеет системное меню, кнопки восстановления размеров, закрытия и сворачивания окна.

Перекрывающееся окно может принадлежать другому окну (владельцу). Если окно-владелец сворачивается в пиктограмму, то подчиненные ему окна становятся невидимыми. При уничтожении окна автоматически уничтожаются подчиненные ему окна. Подчиненные окна всегда располагаются над поверхностью окна-владельца, загораживая его.

Временные окна обычно используют для вывода сообщений пользователю и остаются на экране непродолжительное время. Базовый стиль временного окна описан константой WS_POPUP. Такое окно по умолчанию не имеет заголовка. Чаще временное окно описывают константой WS_POPUPWINDOW. Для добавления к временному окну системного меню и заголовка стиль WS_POPUPWINDOW комбинируют со стилем WS_CAPTION. Во всем остальном временные окна – это специальный вид перекрывающихся окон.

Дочерние окна используют для создания органов управления. Определяемые системой классы органов управления (кнопки, полосы просмотра и т.п.) представляют собой дочерние окна. Базовый стиль дочерних окон описан константой WS_CHILD. Этот стиль полностью совпадает со стилем WS_CHILDWINDOW. Дочерние окна не имеют кнопок минимизации и максимального увеличения размера, но всегда имеют окно-родителя. Они "прилипают" к поверхности родителя, перемещаются с ним и не могут выйти за пределы родительского окна.