Учебное пособие: Работа с окнами приложений

· родительское окно может осуществлять вывод поверх дочернего окна.

Если Вы хотите избежать этого, то Вам надо указать стиль WS_CLIPCHILDREN при создании окна‑родителя.

Зная хендл дочернего окна можно узнать хендл родителя, если воспользоваться одной из двух функций:

HWND GetParent( hwndChild );

HWND GetWindowWord( hwndChild, GWW_PARENT );

Рассмотрим еще несколько стилей, которые можно декларировать при создании окна. Обычно созданное окно может получать сообщения от мыши и клавиатуры. Вы можете указать стиль WS_DISABLED для того, что бы это запретить. Во время работы Вы можете запрещать или разрешать получение сообщений от клавиатуры с помощью функции

BOOL EnableWindow( hWnd, bEnable );

Второй стиль, на который надо обратить внимание – WS_VISIBLE – говорит о том, что создается видимое окно. Если его не указать, то созданное окно будет невидимым. Позже окно можно делать видимым или невидимым с помощью функции:

BOOL ShowWindow( hWnd, SW_HIDE );

BOOL ShowWindow( hWnd, SW_SHOW );

Окна часто создают невидимыми, если при их создании (или сразу после этого) приходится менять их размер или положение. При этом все операции выполняют над невидимым окном и показывают только в его конечном состоянии. Это не только улучшает внешний вид приложения, но и ускоряет выполнение.

Стиль окна влияет, в основном, только на его внешний вид, а свойства окна определяются оконной процедурой. Оконная процедура описывается при регистрации класса окон, а когда создается новое окно мы должны указать имя класса, к которому это окно принадлежит. До сих пор мы сами описывали и регистрировали класс окон и затем создавали окно, принадлежащее этому классу.

В Windows существует возможность использовать один зарегистрированный класс разными приложениями, Вы можете сами разработать собственный класс окон, которым будут пользоваться другие приложения. Сделать это достаточно просто - при регистрации класса окна Вы должны указать стиль класса CS_GLOBALCLASS. После этого все остальные приложения Windows смогут использовать окна этого класса. Единственное новшество будет связано с тем, что при завершении работы Вашего приложения Вы должны удалить объявленный класс из списка классов Windows. Сделать это можно с помощью функции

BOOL UnregisterClass( lpszClassName, hInstance );

Кроме тех классов окон, которые были зарегистрированы приложениями, Windows автоматически создает несколько стандартных классов, которые используются для создания дочерних окон.

Стандартные классы дочерних окон

Сейчас мы рассмотрим несколько классов дочерних окон, предоставляемых Windows. Окна этих классов позволяют создавать наиболее часто используемые “управляющие элементы” - кнопки, полосы прокрутки (scroll bars), простейшие редакторы для ввода текста и пр.

Обычно стандартные управляющие элементы создаются со стилtем WS_VISIBLE и, обязательно, - WS_CHILD. Часто используется стиль WS_BORDER. Для многих классов предусмотрен стиль, указывающий, что родительское окно должно извещаться о таких событиях дочернего окна, как, например, получение и потеря фокуса ввода. Название этого стиля оканчивается на _NOTIFY, например, LBS_NOTIFY.

Дочерние окна, принадлежащие к стандартным классам, обмениваются данными с родительским окном по следующим правилам:

· родительское окно при необходимости посылает доченему окну сообщения с номерами, равными или большими WM_USER. Для каждого стандартного класса дочерних окон определены свои сообщения, на которые они реагируют. Многие из таких сообщений должны вернуть результат, поэтому часто используется SendMessage вместо PostMessage.

· дочернее окно посылает родительскому окну сообщения WM_COMMAND, со следующим назначением параметров:

wPar – идентификатор дочернего окна
LOWORD(lPar) – хендл дочернего окна
HIWORD(lPar) – код извещения

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

· для управления цветом дочернего окна родительское может обрабатывать сообщения WM_CTLCOLOR, которые посылаются всеми стандартными дочерними окнами их родителям.

Статические элементы

Начнем рассмотрение с самого простого класса - класса статических элементов. К статическим элементам относятся прямоугольники (“пустые” и закрашенные), неизменяемый текст и иконки, нарисованные в родительском окне. Статические окна не принимают сообщений от мыши и клавиатуры и не могут иметь фокуса ввода.

Для создания такого окна мы должны указать имя класса “STATIC”, и задать специфичный стиль, определяющий внешний вид этого элемента. Так мы можем указать один из стилей:

SS_BLACKRECT – черный закрашенный прямоугольник

SS_BLACKFRAME – черный контур прямоугольника

SS_GRAYRECT – серый закрашенный прямоугольник

SS_GRAYFRAME – серый контур прямоугольника

К-во Просмотров: 344
Бесплатно скачать Учебное пособие: Работа с окнами приложений