Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Панелі елементів керування




Меню

Лекція №6: Елементи інтерфейсу користувача на основі класів MFC

 

План

1. Меню.

2. Панелі елементів керування.

3. Елементи керування.

4. Блоки діалогу. Модальні та не модальні діалоги.

 

Більшість віконних програм під Windows містять однин або декілька видів меню. За допомогою меню в основному і здійснюється керування програмою. До основних типів меню які реалізовані в бібліотеці MFC відносяться:

- основне меню;

- системне меню;

- контекстне (плаваюче) меню.

Основне меню. розміщується у верхній частині основного вікна у вигляді смуги, що складається з окремих текстових полів (menu bar). Видима частина основного меню є верхнім рівнем ієрархії системи меню програми. Кожен елемент верхнього рівня може розкриватися та відображати елементи нижнього рівня.

Елементи меню нижнього рівня мати різні типи та містити ряд модифікаторів:

- акселератор – повідомляє користувачу набір клавіш для швидкого виклику команди, що зв’язана з цим підпунктом меню;

- стрілка – вказує, що з даним підпунктом меню зв’язане підменю, яке буде розкрито при його виборі;

- маркер – підказує, що даний пункт (режим) вже вибраний;

- трикрапка – повідомляє користувачу, що при виборі цього пункту з’явиться блок діалогу;

- напівтоновий надпис – означає, що в даний момент цей пункт меню недоступний;

- підкреслена літера – дозволяє швидко перейти до елемента меню, шляхом натискання клавіші з літерою яка підкреслена. Такі літери називаються мнемонічними.

Основне меню є основним засобом керування програмою. У ньому, зазвичай, містяться всі команди якими програма керується. Інші засоби керування можуть дублювати функції доступні з основного меню.

Системне меню. Присутнє у вікнах, що мають заголовок та розміщене в правому верхньому куті. У нього входять загальні команди керування програмою, такі як: розгорнути та згорнути вікно; закрити вікно; завершити програму.

Контекстне (плаваюче) меню. Викликається в основному при натисканні правої кнопки миші і контекстно зв’язане з елементом або ділянкою екрану на якому знаходиться курсор миші. Відповідно, воно може міститися в довільному місці екрану. Його вміст залежить від ділянки екрану на якій знаходився курсор миші. Служить для швидкого виклику найбільш вживаних команд для елементу інтерфейсу, що асоціюється з вибраною ділянкою екрану.

В MFC для побудови та програмування меню створений клас CMenu, що увібрав у себе спеціальні функції для роботи з меню реалізовані в Win32 API.

Клас CMenu. Інкапсулює дескриптор HMENU та надає розробнику методи для створення та маніпуляції з елементом керування типу меню. Меню може бути створено:

- динамічно;

- за шаблоном з ресурсів;

- за шаблоном створеним в пам’яті.

Розглянемо основні члени класу CMenu.

 

CMenu::m_hMenu

- містить дескриптор типу HMENU вікна меню, що приєднано до класу.

 

CMenu::CMenu()

- конструктор, створює об’єкт з порожнім меню, яке далі може бути наповнене відповідними методами класу.

 

BOOL CMenu::CreateMenu()

- створює порожнє меню як вікно Windows та приєднує його до об’єкту класу.

 

BOOL CMenu::CreatePopupMenu()

- створює порожнє підменю як вікно Windows та приєднує його до об’єкту класу.

 

BOOL CMenu::LoadMenu(LPCTSTR lpszResourceName)

- створює меню як вікно Windows, приєднує його до об’єкту класу та заповнює його елементами з ресурсів програми. Єдиний параметр (символьний рядок або число) служить ідентифікатором цих ресурсів.

 

BOOL CMenu::LoadMenuIndirect(const void * lpMenuTemplate)

- завантажує меню із шаблону створеного в пам’яті та приєднує його до об’єкту класу. Як параметр приймає адресу цього шаблону.

 

Наступна група функцій призначена для динамічної зміни складу меню. Відповідно вони застосовуються для наповнення порожнього меню.

 

BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewIt = NULL)

- добавляє новий елемент в кінець меню або підменю з ідентифікатором nIDNewItem та назвою lpszNewItem. nFlags – задає тип та вигляд елементу меню (MF_ENABLED, MF_DISABLED, MF_CHECKED та інше).

 

BOOL CMenu::InsertMenu(UINT nPosition, UINT nFlags,

UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)

- добавляє новий елемент в меню або підменю в позицію задану параметром nPosition.

 

BOOL CMenu::ModyfyMenu(UINT nPosition, UINT nFlags,

UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL)

- замінює елемент в меню або підменю в позиції заданій параметром nPosition. Пункт меню не знищується, а повністю міняються всі його параметри.

 

BOOL CMenu::DeleteMenu(UINT nPosition, UINT nFlags)

- знищує елемент в меню або підменю в позиції заданій параметром nPosition.

 

Наступні функції використовуються для зміни стану та властивостей елементів меню. Назви функцій говорять самі за себе, тобто дають контексну підкузку про їх призначення. Наприклад.

 

UINT CMenu::EnableMenuItem(UINT nIDEnableItem, UINT nEnable);

UINT CMenu::CheckMenuItem(UINT nIDCheckItem, UINT nCheck);

UINT CMenu::CheckMenuRadioItem(…);

UINT CMenu::SetMenuItemBitmaps(…);

 

В класі також реалізовані функції, що дозволяють отримати різноманітну інформацію як про саме меню так і про окремі його елементи.

На закінчення розглянемо функцію за допомогою якої створюється плаваюче меню.

 

BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,

CWnd *pWnd, LPCRECT lpRect = 0);

- виводить на екран контекстне меню та створює свій цикл обробки повідомлень. Після вибору елементу меню або відмови від вибору меню знищується. pWnd – визначає вікно яке отримає повідомлення WM_COMMAND після вибору користувачем елемента меню.

 

Панелі елементів керування є додатковими засобами керування програмою. Вони найчастіше використовуються для швидкого виклику деяких команд, що найчастіше вживаються, таких як „відкрити файл”, „зберегти зміни у файлі”, „роздрукувати” та інші.

Базовим класом для панелей елементів керування є клас CControlBar. Ієрархія класів приведена на рис. __

 

 

Рис. __. Ієрархія класів панелей елементів керування

 

Відповідно до приведеної ієрархії класів, панель керування є вікном, і може містити дочірні вікна, які можуть отримувати та відправляти повідомлення (комбінований список COMBO BOX, текстове поле EDIT) або тільки керуватися програмою (кнопки з малюнком BITMAP BUTTONS, ділянка рядка стану STATUS BAR PANES). Базові функціональні можливості для всіх типів панелей елементів керування подібні – всі їх об’єкти є дочірніми вікнами деякої батьківської рамки.

Панель керування може бути фіксованою (dockings) біля довільного боку її батьківської рамки або плаваючою (floating), що визначається встановленням відповідного стилю. Крім того, об’єкти CControlBar можуть самостійно позиціонуються при зміні розмірів батьківської рамки.

Так як клас CControlBar є абстрактним, об’єктів на основі нього створювати не можна. Панелі керування створюються на основі дочірніх класів. До методів які реалізовані в класі CControlBar та часто використовуються відносяться:

 

virtual CSize CControlBar::CalcFixedLayout(BOOL bStretch, BOOL Horz);

- визначає горизонтальний розмір панелі елементів керування. Парметр Horz задає горизонтальну чи вертикальну орієнтацію панелі.

 

void CControlBar::SetBarStyle(DWORD dwStyle);

- задає стиль панелі елементів керування. Наприклад, фіксація біля визначеної сторони батьківської рамки, підкреслення краю панелі, приоритетне розміщення, дозвіл на зміну розмірів та інше.

 

DWORD CControlBar::GetBarStyle();

- повертає поточний стиль панелі елементів керування.

 

BOOL CControlBar::IsFloating();

- дозволяє перевірити, чи панель елементів керування є плаваючою в даний момент.

 

З панелями керування тісно зв’язані деякі функції батьківської рамки (класу CFrameWnd), серед них:

 

void CFrameWnd::SaveBarState(LPCTSTR lpszProfileName);

void CFrameWnd::LoadBarState(LPCTSTR lpszProfileName);

- дозволяють зберегти та завантажувати інформацію про положення, видимість, орієнтацію, фіксацію кожної панелі керування в INI-файлі або в реєстрі системи.

 

void CFrameWnd::ShowControlBar(CControlBar * pBar, BOOL bShow, BOOL bDelay);

- гасить або візуалізує панель елементів керування.

 

void CFrameWnd::DockControlBar(CControlBar * pBar, …);

- прив’язує панель до певної сторони рамки.

 

void CFrameWnd::FloatControlBar(CControlBar * pBar, …);

- переводить панель в плаваючий стан.

 

Як приклад дочірнього класу CControlBar розглянемо панель інструментів CToolBar. У цьому класі реалізовано відображення елементів керування у вигляді кнопок з піктограмами. Інші класи панелей елементів керування організовані подібно, тільки реалізують специфічні для них властивості. Тому розгляд цього класу дасть ключ до розуміння інших класів панелей

Клас CToolBar. Цей клас визначає поведінку панелі інструментів, що задаються кнопками з піктограмами (розміром 23х22 піксела) та розділювачами. Кнопки, подібно до пунктів меню, активізовують команди, що посилаються об’єктам програми та обробляються ними. Кнопки можуть працювати, також, як прапорці та перемикачі.

Для створення об’єкту класу CToolBar використовується конструктор.

 

void CToolBar::CToolBar();

- конструктор, створює об’єкт класу.

 

void CToolBar::Create(CWnd * pParentWnd, DWORD Style, UINT nID = AFX_IDW_TOOLBAR);

- створює вікно та приєднує його до об’єкту. pParentWnd – вказівник на батьківське вікно панелі інструментів; Style - стиль панелі; nID – оригінальний ідентифікатор панелі.

 

void CToolBar::LoadToolBar(LPCTSTR lpszResourceName);

- створює вікно та приєднує його до об’єкту та завантажує дані для нього з ресурсів зданих через ім’я lpszResourceName.

 

void CToolBar::LoadBitmap(LPCTSTR lpszResourceName);

- завантажує з ресурсів програми бітові масиви з піктограмами (через ім’я lpszResourceName).

 

Тут приведені тільки функції створення та ініціалізації панелі інструментів, вони є типовими для багатьох елементів графічного інтерфейсу віконних програм. З інші функціями класу, що дозволяють гнучко керувати поведінкою панелей, можна ознайомитися в технічній документації.

 




Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 797; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.035 сек.