Window * child; // topmost child
Window * next; // link all windows of the
Window * prev; // same parent
I ong style; // window style
long status; // current window status
Window (const Rect& frameRect, char * text, Window * owner); virtual -Window ();
virtual int handle ( const Message& );
virtual void showWindow ();
virtual void hideWindow ();
virtual void moveWindow ( const Rect& );
};

Приведенный пример напоминает реализацию окна в среде Microsoft Windows, где окно фактически представлено как структура, содержащая указатель на функцию обработки сообщений; виртуальная функция handle реализует обработку всех поступающих сообщений.

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

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

Рассмотрим теперь, каким образом реализуются основные операции над окнами: показать/убрать, изменить размер, передвинуть.

1. Показать окно (showWindow).

В переменной status устанавливается бит (WS_VISIBLE), показывающий, что окно отображено. Область отсечения устанавливается равной области окна минус области его непосредственных видимых подокон (у которых в status установлен бит WS_ VISIBLE), и окну посылается сообщение нарисовать себя. Затем подобная же операция выполняется для всех непосредственных видимых подокон этого окна. При создании окна можно указать, следует ли его показывать сразу же, или это необходимо сделать явным вызовом showWindow

2. Убрать окно (hideWindow).

В переменной status сбрасывается бит WS_VISIBLE, соответствующий видимости, и определяется область экрана, которая будет открыта при убирании данного окна с экрана. Затем для каждого окна, которое полностью или частично откроется при убирании данного, определяется открываемая область. Когда эта область откроется, она становится новой областью отсечения и для окна выполняется запрос на


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