- •Санкт-Петербургский государственный электротехнический университет
- •______________________________________________________________________ Кафедра моэвм
- •Санкт-Петербург
- •2007 Введение
- •Взаимодействие между пользователем и компьютером
- •Основные принципы создания интерфейса
- •Проектирование эргономичного интерфейса
- •Размещение информации на экране
- •Использование цвета
- •Выделение элементов интерфейса
- •Непротиворечивость и стандартизация
- •Отображение текстовой информации
- •Ввод текстовой информации
- •Дизайн заголовков и полей
- •Средства управления графическим интерфейсом
- •Принципы создания и проектирования меню
- •5. Дескрипторная графика
- •5.1. Назначение дескрипторной графики
- •5.2. Иерархия графических объектов
- •5.3. Текущий графический объект; указатели на объекты
- •5.4. Доступ к значениям свойств графических объектов
- •5.5. Свойства осей
- •5.6. Свойства графических окон
- •5.6.1. Расположение и вид графических окон
- •5.6.2. Способы графического вывода
- •5.6.3. Цветовая палитра
- •5.6.4. Печать графического окна
- •5.7. Базовые графические объекты.
- •5.7.1. Текстовый объект, вывод текста и математических формул в графическое окно.
- •5.7.2. Размещение текстового объекта, определение его размеров и положения.
- •5.7.3. Размещение текста на трехмерных графиках.
- •5.7.4. Изменение вида текстового объекта.
- •5.7.5. Указание положения текстового объекта и надписи при помощи свойств. Пример: "бегущая строка".
- •5.7.6. Вывод многострочного текста.
- •5.7.7. Примечание про логическое индексирование.
- •5.7.8. Заголовок и подписи осей это текстовые объекты, потомки осей.
- •6. Приложения с gui
- •6.1. Создание приложения hello в среде guide
- •6.2. Запуск приложения без среды guide и редактирование
- •6.3. Как работает приложение, созданное в среде guide?
- •7. Заключение
5.6. Свойства графических окон
5.6.1. Расположение и вид графических окон
При выводе результатов в графические окна сразу же возникает вопрос о задании положения и размеров графических окон на экране. Они определяются значением свойства Position графического окна, которое является вектором [x y width height]. Здесь x и y - координаты нижнего левого угла рабочей области окна, а width и height - ширина и высота рабочей области, соответственно. По умолчанию, единицы измерения - пиксели (можно выбрать и другие, установив свойство окна Units в подходящее значение: 'normalized', 'inches', 'centimeters', 'points', 'characters'). Слова "рабочая область" означают, что берется часть окна, ограниченная рамкой и заголовком. В присутствии рамки легко убедиться, создав графическое окно белого цвета и без строки меню и панели инструментов с использованием свойств Color и MenuBar:
hF = figure('Color', 'w', 'MenuBar', 'none')
Теперь рамка видна (см. рис. 1)
Рис. 1. Смысл свойства Position графического окна
Толщина левой, нижней и правой границы рамки 5 пикселей, а под заголовок отведено 30 пикселей. Этих сведений, однако, недостаточно для расположения графического окна - необходимо знать еще и текущие размеры экрана монитора в пикселях. Для этого придется прибегнуть к предку графического окна - корневому объекту Root, свойства которого служат для определения системных настроек компьютера и значений, принятых в MatLab по умолчанию. Указатель на объект Root всегда равен нулю. В нашем примере необходимо обратиться к свойству ScreenSize объекта Root, значением которого является вектор с координатами левого нижнего угла монитора, его ширины и высоты (по умолчанию, в пикселях):
scrsize = get(0, 'ScreenSize')
scrsize =
1 1 1024 768
Несложные вычисления с его элементами scrsize(1), scrsize(2), scrsize(3) и scrsize(4), толщиной рамки (5 пикселей) и шириной заголовка (30 пикселей) позволяют расположить графическое окно нужного размера в подходящем месте экрана монитора. Пример приведен в справочной системе MatLab в разделе: "MATLAB> Graphics> Figure Properties> Positioning Figures> Example -- Specifying Figure Position".
Свойство MenuBar графического окна может принимать только два значения: 'on' или 'off', что приводит к отображению или скрытию одновременно панели инструментов и меню. Обсудим теперь, как управлять ими по отдельности, например, как получить графическое окно без панели инструментов, содержащее только меню, или наоборот - только панель инструментов. Для этого обращаются к свойству ToolBar, принимающему значения: 'none' (убрать панель инструментов) и 'figure' (добавить панель инструментов, как по умолчанию). Например:
hF=figure('ToolBar', 'figure', 'MenuBar', 'none')
приводит к появлению окна только с панелью инструментов, а
hF=figure('ToolBar','none')
к созданию окна только со строкой меню (см. рис. 2).
Для задания заголовка графического окна служат два его свойства Name и NumberTitle. Значение NumberTitle отвечает за вывод слова Figure и номера окна: 'on' - выводить (по умолчанию), 'off' - не выводить. Значением свойства Name может быть текстовая строка. Эти два свойства позволяют оформить заголовок графического окна по своему усмотрению, например:
hF = figure('NumberTitle', 'off', 'Name', 'Исходные данные')
Разберем теперь несколько более сложный вопрос, как оставить только нужные меню и кнопки на панели инструментов. Создайте графическое окно и сохраните указатель на него в переменной hF:
hF = figure;
Используйте теперь функцию allchild для получения потомков графического окна (в следующих разделах мы рассмотрим этот вопрос подробнее):
hFC = allchild(hF)
Оказывается, что у графического окна 9 потомков, в вектор hFC занесены указатели на них (числовые значения могут отличатся от приводимых ниже):
hFC =
132.0026
120.0026
118.0026
78.0026
62.0026
55.0026
36.0026
15.0026
0.0026
Выясните теперь тип каждого из потомков, выводя значение его свойства Type:
get(hFC, 'Type')
ans =
'uimenu'
'uimenu'
'uimenu'
'uimenu'
'uimenu'
'uimenu'
'uimenu'
'uimenu'
'uitoolbar'
Итак, первые 8 потомков - меню окна, а последний из них - панель инструментов. Свойства объектов типа uimenu и uitoolbar и других элементов управления будут подробно рассмотрены в разделе, посвященном приложениям с графическим интерфейсом пользователя. Сейчас мы прибегнем только к одному из них Visible, которое отвечает за отображение соответствующего объекта и может принимать значения 'on' или 'off'.
Занесем указатели на меню в вектор hFMenu, а указатель на панель инструментов в вектор hFToolBar:
hFMenu = hFC(1:length(hFC)-1); hFToolBar = hFC(end);
Для того, чтобы узнать соответствие указателей на меню c самими меню, следует прибегнуть к их свойству Label:
get(hFMenu, 'Label')
Оказывается, то hFMenu(1) - указатель на меню Help, hFMenu(2) - указатель на меню Window и т. д.
ans =
'&Help'
'&Window'
'&Desktop'
'&Tools'
'&Insert'
'&View'
'&Edit'
'&File'
Значит, для скрытия, например меню Help, Window, Desktop, Insert и Edit достаточно выполнить:
set([hFMenu(1:3); hFMenu(5); hFMenu(7)] ,'Visible', 'off')
Аналогичным образом можно распорядиться и кнопками на панели инструментов - ее потомками. Но сначала необходимо получить указатели на них, снова при помощи allchild:
hTools = allchild(hFToolBar)
hTools =
14.0011
13.0011
12.0011
11.0011
10.0011
9.0011
8.0011
7.0011
6.0011
5.0011
4.0011
3.0011
2.0011
1.0011
Элементов вектора hTools ровно столько, сколько кнопок на панели инструментов, причем hTools(1) является указателем на Show Plot Tools, hTools(2) - Hide Plot Tools и т. д., а hTools(end) - указатель на New Figure. Предположим, что требуется оставить только инструменты увеличения и уменьшения масштаба и поворота. Тогда скрываем остальные:
set([hTools(1:5); hTools(7); hTools(10:end)], 'Visible', 'off')
В результате получается окно, приведенное на рис. 3.