16 Панель управления (Лекции по курсу ПОУК-1)

2017-12-28СтудИзба

Описание файла

Файл "16 Панель управления" внутри архива находится в папке "Лекции по курсу ПОУК-1". Документ из архива "Лекции по курсу ПОУК-1", который расположен в категории "". Всё это находится в предмете "программное обеспечение управляющих комплексов (поук)" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "программное обеспечение управляющих комплексов (поук)" в общих файлах.

Онлайн просмотр документа "16 Панель управления"

Текст из документа "16 Панель управления"

8 стр. Лекция 16. Панель управления

Панель управления

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

Если приложение имеет сложную систему управления, то создание для каждой строки меню отдельной кнопки в одной панели управления нецелесообразно, так как количество кнопок может быть достаточно велико. Для решения этой проблемы обычно создают несколько панелей управления, которые пользователь может открывать и закрывать по своему усмотрению.

Панель управления является отдельным ресурсом, таким же как меню или шаблон диалоговой панели. Каждая кнопка панели управления имеет свой идентификатор ID, обычно такой же как и соответствующий пункт меню, который эта кнопка дублирует.

В панели управления можно задавать разделители (SEPARATOR), при помощи которых кнопки разделяются на группы по смыслу. Каждая кнопка и каждый разделитель в панели управления имеют свой собственный индекс. Этот индекс соответствует порядковому номеру, под которым кнопка или разделитель отображаются на экране.

Ресурсы панели управления

Каждый ресурс, представляющий панель управления в редакторе ресурсов Microsoft Visual C++, выступает как единое целое, позволяя одновременно изменять внешний вид кнопок, задавать их идентификаторы и строки описания. В исходном же файле ресурсов приложения ресурс панели управления состоит из трех частей.

Первая часть описывает панель управления, например:

IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15

BEGIN

BUTTON ID_FILE_NEW

BUTTON ID_FILE_OPEN

BUTTON ID_FILE_SAVE

SEPARATOR

BUTTON ID_EDIT_CUT

BUTTON ID_EDIT_COPY

BUTTON ID_EDIT_PASTE

SEPARATOR

BUTTON ID_FILE_PRINT

BUTTON ID_APP_ABOUT

END

В данном фрагменте описывается панель управления с идентификатором IDR_MAINFRAME. В блоке BEGIN-END при помощи ключевого слова BUTTON идет описание каждой кнопки панели управления, где задается идентификатор кнопки. Ключевое слово SEPARATOR означает, что между кнопками, разделенными строкой SEPARATOR, увеличивается расстояние. За счет этого достигается эффект разделения кнопок на группы.

В первой части ресурса панели управления отсутствует изображения кнопок. Они располагаются отдельно и представляют вторую часть ресурса. Все кнопки представлены одним bitmap-изображением, имеющим тот же идентификатор, что и соответствующий ресурс TOOLBAR, например:

IDR_MAINFRAME BITMAP MOVEABLE PURE "res\\Toolbar.bmp"

Все изображения кнопок расположены последовательно одна за другой в изображении Toolbar.bmp. Порядок, в котором они расположены, должен соответствовать порядку, в котором кнопки описаны в ресурсе TOOLBAR, и порядку, в котором они будут отображаться на экране. Между отдельными изображениями кнопок должны отсутствовать промежутки, даже если в описании ресурса TOOLBAR присутствуют разделители SEPARATOR.

Для каждой кнопки можно ввести описывающую ее текстовую строку. Эти строковые ресурсы и хранятся в третьей, необязательной части ресурса панели управления.

Соответствие строковых ресурсов кнопкам панели управления достигается за счет присвоения им одинаковых идентификаторов, например:

STRINGTABLE DISCARDABLE

BEGIN

……

ID_FILE_NEW "Create a new document\nNew"

END

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

Создание панели управления

Для работы с панелями управления в состав библиотеки MFC включены два класса - CToolBar и CDialogBar. Они оба наследуются от базового класса CControlBar, реализующего основные функции панели управления. Кроме того, от базового класса наследуется еще один класс - CStatusBar. Он предназначен для работы с панелью состояния и будет рассматриваться позже.

Класс CToolBar представляет панель управления, состоящую из кнопок. При желании можно в панель управления класса CToolBar помимо кнопок включить и другие органы управления, например, списки или поля редактирования, однако такая возможность требует дополнительного программирования. Если необходимо создать панель, содержащую различные органы управления, а не только кнопки, то удобнее воспользоваться классом CDialogBar. Этот класс позволяет создать панель управления на основе шаблона диалоговой панели и будет рассматриваться позже.

Кнопки панели управления могут работать как кнопки, как переключатели и как переключатели с зависимой фиксацией (радио-кнопки). Тип кнопок панели управления выбирается методами класса CToolBar, например, метод SetButtonStyle.

Чтобы создать панель управления, необходимо сначала определить объект класса CToolBar, который будет представлять данную панель. Можно создать объект и нового класса, наследованного от CToolBar, в котором новыми дополнительными методами расширяются возможности класса CToolBar.

Обычно объект CToolBar включают как элемент главного окна приложения, например как элемент класса, наследованного от класса CFrameWnd (или CMDIFrameWnd - в зависимости от интерфейса приложения), например:

class CMainFrame : public CMDIFrameWnd

{

protected:

CToolBar m_wndToolBar; // панель управления

// другие описания класса

.......

};

После того, как объект класса CToolBar образован, следует вызвать для него метод Create, который создает панель управления:

BOOL Create( CWnd* pParentWnd,

DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,

UINT nID = AFX_IDW_TOOLBAR );

В качестве параметров методу Create указываются различные характеристики создаваемой панели. Только первый параметр является обязательным - в нем указывается идентификатор родительского окна для панели управления.

Необязательный параметр dwStyle определяет, как будет отображаться панель управления. Рассмотрим некоторые флаги, комбинации которых можно использовать для задания характеристик панели:

  • CBRS_BOTTOM - панель отображается в нижней части окна.

  • CBRS_FLOATING - панель отображается в отдельном окне.

  • CBRS_FLYBY - панель состояния отображает краткое описание выбранной кнопки.

  • CBRS_SIZE_DYNAMIC - размер панели можно изменять. При этом кнопки в панели могут перестраиваться в несколько рядов.

  • CBRS_SIZE_FIXED - размер панели нельзя изменять.

  • CBRS_TOOLTIPS - краткое описание кнопки отображается в окне tool tips.

  • CBRS_TOP - панель отображается в верхней части окна.

Через последний параметр метода Create передается идентификатор, который будет присвоен панели управления. По умолчанию используется идентификатор AFX_IDW_TOOLBAR.

Следует заметить, что приложения, созданные MFC AppWizard, имеют меню View, содержащие строки «Toolbar» и «Status ba». Эти строки позволяют показывать и скрывать панели управления и состояния в главном окне приложения. Для обработки сообщений о выборе строки меню «Toolba» используется метод OnUpdateControlBarMenu класса CFrameWnd. Причем этот метод может управлять отображением панели управления, если только она имеет идентификатор AFX_IDW_TOOLBAR.

После создания панели управления методом Create, необходимо загрузить ресурс панели управления. Для этого предназначен метод LoadToolBar. В качестве параметра этому методу следует указать или имя ресурса панели управления, либо идентификатор ресурса панели управления.

Во время создания панели управления можно указать ее характеристики. Эти характеристики можно изменить прямо во время работы приложения с помощью метода SetBarStyle класса CControlBar. Параметр этого метода задает новые характеристики панели управления. В качестве этого параметра можно использовать комбинации флагов, некоторые из которых описаны ниже:

  • CBRS_ALIGN_TOP - панель можно отобразить в верхней части окна.

  • CBRS_ALIGN_BOTTOM - панель можно отобразить в нижней части окна.

  • CBRS_ALIGN_LEFT - панель можно отобразить в левой части окна.

  • CBRS_ALIGN_RIGHT - панель можно отобразить в правой части окна.

  • CBRS_ALIGN_ANY - панель можно отобразить в любой части окна.

  • CBRS_TOOLTIPS - краткое описание кнопки отображается в окне tool tips.

  • CBRS_FLYBY - панель состояния отображает краткое описание выбранной кнопки.

Для определения текущих характеристик панели управления используется метод GetBarStyle класса CControlBar.

Форма панели и режимы работы кнопок

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

Возможность или невозможность изменить форму панели управления определяется методом Create класса CToolBar. Флаг CBRS_SIZE_DYNAMIC позволяет изменять форму панели, а флаг CBRS_SIZE_FIXED запрещает это делать. Изменить эти характеристики можно динамически при помощи метода SetBarStyle.

В состав класса CToolBar входит метод SetButtonStyle. Этот метод позволяет установить режим работы кнопок панели управления, сгруппировав несколько кнопок вместе. Через первый параметр передается индекс кнопки или разделителя в панели управления, а второй параметр позволяет установить новый режим работы. Индекс кнопки или разделителя соответствует их порядковому номеру в панели управления. В качестве второго параметра можно указать комбинацию нескольких флагов:

  • TBBS_BUTTON - стандартная кнопка.

  • TBBS_SEPARATOR - разделитель.

  • TBBS_CHECKBOX - переключатель

  • TBBS_GROUP - с данной кнопки начинается группа кнопок.

  • TBBS_CHECKGROUP - с данной кнопки начинается группа переключателей.

  • TBBS_WRAPPED - позволяет создать панель управления, в которой кнопки расположены в несколько рядов. Рекомендуется установить этот флаг для самых последних кнопок в каждом ряду. Кнопка, следующая за кнопкой с установленным флагом TBBS_WRAPPED, отображается в новом ряду.

Определить текущий режим кнопки или разделителя можно при помощи метода GetButtonStyle класса CToolBar.

Индекс, или порядковый номер, любой кнопки панели управления можно определить по ее идентификатору. Для этого предназначен метод CommandToIndex класса CToolBar. Обратную задачу - по индексу кнопки возвращает ее идентификатор - выполняет метод GetItemID.

Положение панели управления

Для того, чтобы пользователь мог сам перемещать панель управления с одной границы экрана на другую или разместить ее в отдельном окне, необходимо сделать следующие действия:

  • Разрешить перемещение панели управление для окна, которое содержит панель управления, вызовом метода EnableDocking данного окна (этот метод является элементом класса CFrameWnd).

  • Разрешить такое перемещение для самой панели управления методом EnableDocking панели управления (этот метод является элементом класса CControlBar).

  • Переместить панель управления к одной из сторон приложения или вывести ее в отдельном окне. Для этого необходимо вызвать метод DockControlBar или FloatControlBar данного окна приложения (эти методы являются элементами класса CFrameWnd).

Если не выполнить хотя бы один пункт из этих трех перечисленных выше, панель управления будет жестко привязана к одной из границ окна.

Пример создания панели управления

Обычно создание панели управления и разрешение перемещения панели управления производят при обработке сообщения WM_CREATE для главного окна приложения, например:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

// вызов метода базового класса для корректного создания окна

if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

// разрешить присоединение панелей ко всем сторонам окна

EnableDocking(CBRS_ALIGN_ANY);

// создание панели управления

if (!m_wndToolBar.Create(this) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) return -1;

// установить характеристики панели управления

m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее