- •О.С. Зеленський
- •Розділ 1. Загальні відомості створення додатку windows
- •1.1. Створення додатку Windows за допомогою майстра AppWizard
- •1.2. Варіанти майстрів для різних проектів
- •1.3. Короткий опис sdi програми
- •1.4. Короткий опис mdi програми
- •1.5. Короткий опис простого діалогового додатку
- •Контрольні питання
- •Розділ 2. Повідомлення і команди
- •2.1. Обробка повідомлень
- •2.2. Цикли обробки повідомлень
- •2.3. Карти повідомлень
- •Контрольні питання
- •Розділ 3. Документи та види
- •3.1. Клас додатку
- •3.2. Клас головного вікна
- •3.3. Клас документа
- •3.4. Класи виду
- •Контрольні питання
- •Розділ 4. Робота з клавіатурою, мишею і меню
- •4.1. Робота з клавіатурою
- •4.2. Робота з мишею
- •4.3. Робота з меню
- •Контрольні питання
- •Розділ 5. Виведення на екран
- •5.1. Класи графічних об'єктів
- •5.2. Робота зі шрифтами
- •5.3. Робота з пензликами та малювання графічних фігур
- •5.4. Робота з пензликом
- •5.5. Робота зі скролінгом
- •5.6. Приклад роботи з таблицями
- •5.7. Малювання на екрані маніпулятором "миша"
- •5.8. Завантаження та виведення на екран бітових зображень
- •5.9. Копіювання бітових образів
- •5.10. Малювання графічних об'єктів з використанням резинових контурів та метафайлів
- •5.11. Виділення графічних об'єктів у прямокутній області
- •5.12. Універсальний приклад роботи з двовимірною графікою з використанням резинового контуру
- •5.13. Запис на диск та зчитування з диску графічних об'єктів
- •5.14. Побудова кругових діаграм і гістограм
- •5.15. Користувацький режим роботи з графікою на прикладі малювання годинника Clock
- •Контрольні питання
- •Завдання
- •Розділ 6. Друк і попередній перегляд документів
- •6.1. Вибір і налаштування параметрів друку
- •6.2. Створення контекста пристрою
- •6.3. Друк документів і бібліотека mfc
- •6.4. Масштабування
- •6.5. Друк багатосторінкового документа
- •Контрольні питання
- •Розділ 7. Робота з файлами
- •7.1. Приклад роботи з файлами на основі класів cFile, cStdioFile та потоку fstream
- •7.1.1. Робота з класом cFile
- •7.1.2. Робота з потоком fstream
- •Можливі режими доступу
- •7.1.3. Робота з класом cStdioFile
- •7.2. Серіалізація даних, клас cArchive
- •7.3. Використання реєстру в додатках
- •Контрольні питання
- •Завдання
- •Розділ 8. Діалогові вікна
- •8.1. Створення діалогового вікна та простіші елементи керування
- •8.2. Робота зі списками і комбінованими полями
- •8.3. Ускладнений приклад зі списками
- •8.4. Робота з повзунками
- •8.5. Виведення бітових матриць в діалозі та у вікні виду
- •8.6. Лінійний регулятор, лінійний індикатор, інкриментний регулятор
- •8.7. Стандартні діалоги вибору файлів, шрифтів та кольору
- •8.8. Взаємоз'вязок діалога, документа та виду при розробці додатку
- •8.8.1. Клас cDialDoc
- •8.8.2. Клас cDialView
- •8.8.3. Клас Cdlg
- •8.9. Формування вхідного документа на основі діалогу
- •Контрольні питання
- •Завдання Робота з типовими елементами керування
- •Робота зі списками і комбінованими полями
- •Список літератури
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).