Вспомогательные (popup) окна обычно используются для отображения на короткий промежуток времени какой-либо информации. Диалоговые окна и окна сообщений тоже являются вспомогательными, но для работы с ними используются специальные функции .
Для каждого вспомогательного окна, как правило, организуется своя функция окна.
Вспомогательное окно можно создать, указав флаг WS_POPUP в третьем параметре вызова функции CreateWindow().
Приведем некоторые особенности вспомогательных окон.
· Вспомогательные окна не имеют заголовка. Вы можете использовать флаг WS_BORDER или WS_DLGFRAME вместо WS_CAPTION для отображения рамки окна.
· Вспомогательные окна часто должны иметь фиксированный размер (хотя это не является обязательным). Для этого надо исключить из определения типа окна флаги WS_THICKFRAME и WS_MAXINIZEBOX.
· Вспомогательное окно может иметь, а может и не иметь окно-родителя. Если вспомогательное окно не имеет окна-родителя, то поле «индекс окна родителей» содержит NUUL, и вспомогательное окно совершенно независимо от создавшего его окна и по своим свойствам практически неотличимы от перекрывающихся окон. Поведение вспомогательного окна, имеющего родителя, зависит от того, что происходит с окном-родителем.
· Когда главное окно минимизируется, вспомогательное окно без «родителя» скрывается, а вспомогательное окно с «родителем» остается на экране сверху (как поплавок всегда оказывается сверху). Это справедливо и в том случае, когда вспомогательное окно минимизировано (что производит довольно неприятное впечатление); по этой причине иногда рекомендуется защищать минимизацию окна, не указывая вспомогательному окну флаг WS_MINIMIZEBOX.
Дочерние окна могут иметь самые различные функции, принимать всевозможные формы и размеры. Текстовые поля, редакторы, кнопки, окна-списки - все они являются частными случаями класса дочерних окон.
Дочерние окна имеют следующие особенности.
· Дочерние окна никогда не отображаются вне своего родительского окна ни в раскрытом виде, ни в виде пиктограммы: они как бы целиком принадлежат родителю.
· Координаты дочерних окон отсчитываются не от верхнего левого угла экрана дисплея, а от верхнего левого угла рабочей области окна-родителя. При перемещении родительского окна по экрану дочерние окна перемещаются вместе с ним, так что их относительные координаты остаются неизменными.
· Дочернее окно никогда не может стать активным окном.
Таким образом:
· Перекрывающееся окна (overlapped window) окно никогда не имеет родителя.
· Дочернее окно (child window) всегда имеет родителя.
· Вспомогательное (popup window) окно может иметь, а может и не иметь родителя, то все равно это не дочернее, а вспомогательное окно.