Компьютерная графика. Полигональные модели Приведем в качестве примера цикл обработки сообщений в программе для 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