if (! view -> canReceiveFocus ()) // view does not want to be input focus return FALSE;
// inform current focus view // that's it's loosing focus to 'view' View * old Focus = focusedView; // save focus
focusedView = NULL; // so isFocused return FALSE
sendMessage ( oldFocus, WM_LOOSEFOCUS );// inform focused view that it's
// loosing input focus inform window th // it gets input focus
sendMessage (focusedView = view, WM_RECEIVEFOCUS );
return TRUE; void redrawRect ( const Rect& r)
screen.redrawRect (r); View * findView ( const Point& p ) return screen.findView ( p ); Object * loadView () return new View;

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

На компакт-диске приводятся несколько программ, написанных с использованием данного модуля.

На компакт-диске вы также найдете ряд снимков системы NextStep как один из самых удачных примеров оконного интерфейса.

Упражнения

1. Для предложенной оконной системы реализуйте основные управляющие элементы (CheckBox, ScrollBar, TextEdit, ListBox и т. д.).

2. Реализуйте файловый диалог, подобный реализованому в Windows 3.1 или Windows 95.

3. На построенном графическом интерфейсе реализуйте редактор уровней для игры типа Wolfenstein 3d (см. гл. 13), позволяющий создавать лабиринты, назначать текстуры стенам и полу, размещать различные объекты - двери, оружие, боеприпасы, аптечки и т. п.


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