Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

4.3. Робота з меню

Приклад роботи з меню знаходиться у папці DISK\Nach\menu.

Дана програма дозволяє створювати окремі меню або окремі команди у вже існуючому меню; створювати нові кнопки на панелі інструментів; наділяти кнопки можливістю виведення підказки; створювати клавіші прискореного виклику і акселератори; виводити довідку в рядку стану; блокувати і позначати команди меню.

Проект формується також як і в попередньому прикладі (додаток Single). Найменування програми Menu.

Послідовність роботи.

1. Відкриваємо ресурс меню IDR_MAINFRAME в редакторі меню. Почнемо з додавання меню Demo. Воно повинно розташовуватися між меню File і Edit. Виділіть меню Edit і натисніть клавішу Insert. У рядку з'явиться нове меню. Двічі натисніть на ньому і у вікні властивостей Menu Item Properties в полі Caption дайте йому ім'я Demo. Оскільки це меню, що випадає (Popup) ідентифікатор (ID) йому не присвоюється. Для введення окремих команд меню, що випадає, ідентифікатору можна дати своє ім'я, або він формується автоматично при закритті вікна властивостей. Таким чином сформовані дві команди, Demo1 і Demo2. Третя команда SubMenu є підменю і тому не вимагає ідентифікатора. Її дві команди SubMenu1 і SubMenu2 формуються аналогічно командам Demo1 і Demo2 (рис. 4.1). Вони формують відгуки і мають свої ідентифікатори. Таким чином створена меню, яке формує чотири відгуку від команд Demo1, Demo2, SubMenu1, SubMenu2.

Рис. 4.1. Робота з меню

2. Додавання клавіш прискореного виклику. Створити клавішу прискореного виклику дуже просто – досить вставити символ «&» перед тією буквою в назві меню або команди, яка буде використовуватися для прискореного виклику. Наприклад, щоб використовувати літеру D для прискореного виклику меню Demo, змініть назву меню на &Demo. У цьому випадку буква D в назві меню Demo буде підкреслена (див. рис. 4.1). Тоді, якщо користувач натисне Alt+D, відкриється меню Demo. Аналогічним чином створюються клавіші прискореного виклику і для команд меню Demo.

3. Виведення довідки в рядок стану. Коли користувач виділяє команду меню, у рядок стану можна вивести додаткову інформацію про неї. Для цього досить розмістити потрібний текст у полі Prompt вікна Menu Item Properties. Наприклад, для виведення тексту при натисканні команди Demo1 в командному рядку буде повідомлення «Demo1». Для цього досить у властивостях команди Prompt ввести текст «Demo1».

4. Додавання акселераторів. Щоб створити акселератор для команди меню виконайте наступні дії:

4.1. Відкрийте папку Accelerator і двічі клацніть на рядку IDR_MAINFRAME.

4.2. Двічі клацніть на останньому рядку в списку акселераторів.

4.3. Виберіть ідентифікатор команди меню Demo1, ID_DEMO_DEMO1.

4.4. У полі Key встановіть віртуальну клавішу VK_F5, а в якості модифікатора (Modifiers) встановіть прапорець Ctrl. Тепер за допомогою клавіш Ctrl+F5 викликається команда даного меню. Щоб користувач знав, що за обраною командою меню встановлений акселератор, бажано найменування команди, скажімо Demo1, змінити на Demo1\tCtrl+F5, де «\t» - символ табуляції.

5. Додавання кнопок на панель інструментів. Відкрийте у вікні перегляду папку Toolbar і натисніть на рядок IDR_MAINFRAME. На панелі буде активна порожня кнопка. Графічними засобами на ній можна виконати будь-який малюнок. Для прив'язки нової кнопки та команди меню Demo1 на панелі інструментів двічі клацніть на порожній кнопці. У вікні властивостей Toolbar Button Properties виберіть зі списку вже створений ідентифікатор ID_DEMO_DEMO1. Це забезпечує зв'язок між командою меню і кнопкою на панелі інструментів. Для того щоб вивести підказку при підведенні миші до певної кнопці на панелі інструментів у полі Prompt можна ввести текст «Demo1\nDemo1». Це означає, що текст «Demo1» буде не тільки в рядку стану (нижня частина екрану), а також буде підказка, при підведенні курсору миші до кнопки панелі інструментів. Це забезпечує роздільник рядків «\n».

6. Блокування або зміна виду команд меню виконується програмним шляхом. Скажімо, при натисканні команди Demo1 буде заморожена команда SubMenu1, а при виконанні команди Demo2, команда SubMenu1 буде активна. Це можна пояснити, виконавши наступні дії. У ClassWizard для команд Demo1 і Demo2 зв'яжемо їх ідентифікатори з відгуком COMMAND. Тобто, при виконанні цих команд будуть підключені наступні функції – OnDemoDemo1() і OnDemoDemo2(). Для команди SubMenu1 зв'яжемо її ресурс з відгуком UPDATE_COMMAND_UI. Тобто буде згенерована функція OnUpdateDemoSubmenuSubmenu1(). Потім додамо в клас CMenuView змінну per_sub типу bool, а в конструкторі даного класу ініціалізуємо цю змінну значенням true. Тексти вище перерахованих функцій будуть виглядати наступним чином.

void CMenuView::OnDemoDemo1()

{

per_sub = false;

}

void CMenuView::OnDemoDemo2()

{

per_sub = true;

}

void CMenuView::OnUpdateDemoSubmenuSubmenu1(CCmdUI* pCmdUI)

{

pCmdUI->Enable(per_sub);

}

При натисканні команди меню Demo1 змінна per_sub буде дорівнює false, а при натисканні команди Demo2 – true. У функції OnUpdateDemoSubmenuSubmenu1(CCmdUI* pCmdUI) передається параметр, що представляє собою вказівку на об'єкт класу CCmdUI. Він має п'ять методів, два з яких є основними: Enable – встановлює або знімає блокування елемента користувацького інтерфейсу, відповідного даній команді; SetCheck – встановлює прапорець для елемента користувацького інтерфейсу, відповідного даній команді. Таким чином, у цій функції при виконанні команди Demo1 блокується команда SubMenu1, при натисканні Demo2 – це блокування знімається (див. рис. 4.1).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]