Дочернее окно

Дочернее окно , WS_CHILD стиль и только в клиентской области родительского окна. Приложение обычно использует дочерние окна делить клиентскую область родительского окна на функциональные области. Создается дочернее окно, указав в WS_CHILD стиле в CreateWindowEx функции.

Дочернее окно должно иметь родительского окна. Родительское окно может быть перекрывающихся окно, всплывающее окно или даже другого дочернего окна. При вызове CreateWindowExуказать родительского окна. Если задать стиль WS_CHILD в CreateWindowEx , но не указан родительского окна, система не создает окно.

Дочернее окно имеет клиентскую область, но не других функций, если только они явно потребуют. Приложение может запрашивать строке меню окна заголовка, свести к минимуму и максимально увеличить кнопки, границы и полосы прокрутки для дочернего окна, но дочернее окно не может иметь меню. Если приложение указывает дескриптор меню, либо когда он регистрирует класс дочернего окна или создает дочернее окно, дескриптор меню игнорируется.

Позиционирование

Система всегда позиции дочернего окна относительно в верхнем левом углу клиентской области своего родительского окна. Никакая часть дочернего окна появляется когда-либо за пределами границ родительского окна. Если приложение создает дочернее окно, которое больше, чем родительского окна или позиции дочернего окна так, что все или некоторые из дочернего окна выходит за пределы границ родительского, система клипы дочернего окна; то есть не отображается часть вне клиентской области родительского окна. Действия, которые влияют на родительское окно также может влиять на дочернее окно, а именно.

Родительское окно Дочернее окно
Уничтожен Уничтожен перед удалением родительского окна.
Скрытые Скрытые прежде чем родительское окно скрыто. Дочернее окно видна только при отображении родительское окно.
Переехал Переехал с клиентской области родительского окна. Дочернее окно отвечает за живопись клиентской области после переезда.
Показано Показана после родительского окна.

Отсечения

Система автоматически не отсекать дочернее окно от родительского окна клиентской области. Это значит что родительского окна рисует над дочернее окно, если он выполняет любой рисунок в том же месте, что дочернее окно. Однако система клип дочернего окна от родительского окна клиентской области, если родительское окно имеет WS_CLIPCHILDREN стиль. Если дочернее окно обрезается, родительское окно не может привлечь над ним.

Дочернее окно может перекрывать другие дочерние окна в том же клиентской области. Дочернее окно, которое разделяет же родительское окно как одного или нескольких других дочерних окон называется окно сестру. Родственный windows может использовать друг друга клиентской области, если только один из дочерних окон имеет WS_CLIPSIBLINGS стиль. Если дочернее окно имеет этот стиль, обрезается любая часть его сестру окно, которое находится в пределах дочернее окно.

Если окно имеет стиль WS_CLIPCHILDREN или WS_CLIPSIBLINGS, происходит небольшой потери в производительности. Каждое окно занимает системных ресурсов, поэтому приложение не должно использовать дочерних окон без разбора. Для достижения наилучшей производительности приложения, которое необходимо логически разделить его главного окна следует сделать это в процедуре окна главного окна, а не с помощью дочерних окон.

Связь с родительского окна

Приложение может изменить родительское окно существующего дочернего окна путем вызова функции SetParent . В этом случае система удаляет дочернего окна из клиентской области старых родительского окна и перемещает его в клиентской области нового родительского окна. Если SetParent указывает дескриптор NULL, окно рабочего стола становится нового родительского окна. В этом случае дочернее окно рисуется на рабочий стол, за пределами любого другого окна. Функция GetParent получает дескриптор родительского окна дочернего окна.

Родительское окно освобождает часть клиентской области дочернее окно, и дочернее окно получает все входные данные из этой области. Класс окна не должны быть одинаковыми для каждого из дочерних окон родительского окна. Это значит, что приложение может заполнять родительского окна с дочерних окон, которые выглядят по-разному и выполнять различные задачи. Например диалоговое окно может содержать множество типов элементов управления, каждый из них дочернее окно, которое принимает различные типы данных от пользователя.

Дочернее окно имеет только один родительского окна, но один из родителей может иметь любое количество дочерних окон. В свою очередь, каждое дочернее окно может иметь дочерние окна. В этой цепочке windows каждое дочернее окно называется вложенным окно исходного родительского окна. Приложение использует функцию IsChild чтобы определить заданного окна является дочернее окно или окно потомков заданного родительского окна.

Функция EnumChildWindows перечисляет дочерние окна родительского окна. Затем EnumChildWindows передает дескриптор для каждого дочернего окна в функцию обратного вызова, определяемый приложением. Также перечисляются потомков windows данного родительского окна.

Сообщения

Система передает ребенок окна ввода сообщений непосредственно в дочернее окно; сообщения не передаются через родительского окна. Единственное исключение если дочернее окно была отключена с помощью функции EnableWindow . В этом случае система проходит все входные сообщения, которые бы пошли в дочернее окно родительского окна вместо этого. Это позволяет родительского окна для изучения ввода сообщений и позволить дочернее окно, при необходимости.

Дочернее окно может иметь уникальный целочисленный идентификатор. Дочерние окна идентификаторы имеют важное значение при работе с управления окнами. Приложение направляет деятельность элемент управления путем отправки ему сообщений. Приложение использует идентификатор окна элемента управления дочерних для направления сообщений для элемента управления. Кроме того элемент управления отправляет сообщения уведомления родительского окна. Сообщение уведомления включает элемента управления дочерних окон идентификатор, который родитель использует для идентификации, какой элемент управления отправляет сообщение. Приложение определяет идентификатор дочернего окна для других типов дочерних окон, установив параметр hMenu CreateWindowEx функции значение, а не маркера меню.

Index