Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложения с GUI и дескрипторная графика.doc
Скачиваний:
49
Добавлен:
01.05.2014
Размер:
699.39 Кб
Скачать

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.