Компьютерная графика. Полигональные модели Приведем в качестве примера цикл обработки сообщений в программе для Microsoft Windows:

while ( GetMessage ( &msg, NULL, 0, 0 )) {
TranslateMessage (&msg ); DispatchMessage ( &msg );
}

В этом примере функция GetMessage извлекает очередное сообщение из системной очереди сообщений, а функция DispatchMessage отправляет- его тому объекту, которому оно предназначено.

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

Второй основополагающей концепцией является понятие окна, окна как объекта. Окно - это не просто область на экране (как правило, прямоугольная), это еще и программа (функция), способная выполнять различные действия, присущие окну. В качестве таких действий выступают реагирование на поступающие сообщения и посылка сообщений другим объектам.

Все окна образуют иерархическую (древовидную) структуру - каждое окно может иметь подокна, непосредственно принадлежащие этому окну и содержащиеся в нем. Любое окно, кроме корневого, также имеет родителя - окно, которому оно само принадлежит. Родительское окно и его подокна могут обмениваться сообщениями.

Корневое окно обычно называется десктопом (desktop) и занимает собой весь экран.

Замечание. Оконная система компьютеров Apple Macintosh поддерживает всего три уровня иерархии - desktop, обычное окно и управляющий элемент (control) -особый тип подокна.

Пример иерархии окон представлен на рис. 5.1.

Принципы построения пользовательского интерфейса

5. Принципы построения пользовательского интерфейса о

С учетом этого простейшее окно может быть реализовано следующим классом: class Window {

public:
Rect area; // area of the window
char * text; // text or caption of the window
Window * parent; // owner of this window

⇐ Предыдущая| |Следующая ⇒