
- •Уп. 1. Создание оконных приложений Win32
- •1. Определения
- •2. Класс окон
- •2.1. Описание используемых классом окон ресурсов
- •2.2. Пример регистрации класса окон
- •2.3. Функция окна
- •3. Создание окон
- •4. Главная функция приложения
- •5. Создание приложения Win32
- •1.6. Вспомогательные функции создания окон
- •1.6.1. Функции поиска и определения состояния окон
- •1.6.2. Функции перемещения окон
- •1.6.3. Сообщения приложения для пользователя
- •7. Примеры создания окон
- •7.1. Проверка наличия предыдущего экземпляра
- •7.2. Расположение окон черепицей
- •Контрольные вопросы
- •Упражнения
- •Приложение 1
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 //Указатель на данные окна
);
Назначение аргументов вызова этой функции:
lpClassName указывает на имя зарегистрированного функцией RegisterClass или определенного операционной системой класса.
lpWindowName указывает на строку, содержащую имя создаваемого окна.
dwStyle задает стиль окна. Стиль окон будет отдельно рассмотрен ниже.
х – координата левого края окна в пикселях. Для перекрывающихся или временных окон х отсчитывают от левого края экрана, дочерних окон – от левого края рабочей области родительского окна. Если для перекрывающегося окна со стилем WS_VISIBLE в качестве х задать константу CW_USEDEFAULT, Windows устанавливает не обязательно нулевую позицию по умолчанию для левого верхнего угла окна и игнорирует координату y верхнего края окна. Для временного и дочернего окна такая позиция по умолчанию равна (0, 0).
y – координата верхнего края окна в пикселях. Для перекрывающихся и временных окон ее отсчитывают от верхнего края экрана, дочерних окон – от верхнего края рабочей области родительского окна.
nWidth – ширина окна в пикселях. Для перекрывающихся окон можно задать равной CW_USEDEFAULT. В этом случае система устанавливает ненулевые значения ширины и высоты по умолчанию и игнорирует заданную высоту nHeight окна. Ширина и высота временного и дочернего окна по умолчанию равны нулю.
hWndParent может указывать только на инициированное окно. Дескриптор окна-родителя обязательно указывают при создании дочернего окна. Дескриптор окна-владельца для временного окна указывать необязательно.
hMenu – дескриптор меню или идентификатор создаваемого дочернего окна.
Меню перекрывающегося или временного окна можно задать тремя способами:
в классе окон указывают имя меню, и все окна этого класса могут пользоваться этим меню;
имя меню указывают как аргумент функции CreateWindow, и создаваемое окно будет пользоваться этим меню, игнорируя меню класса;
меню создают в процессе или после создания окна.
В первом и третьем случаях аргумент 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. Дочерние окна не имеют кнопок минимизации и максимального увеличения размера, но всегда имеют окно-родителя. Они "прилипают" к поверхности родителя, перемещаются с ним и не могут выйти за пределы родительского окна.