Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическая работа № 3.doc
Скачиваний:
4
Добавлен:
04.12.2018
Размер:
206.34 Кб
Скачать

1.3 Створення меню

1.3.1 Використання редактора меню

Наступна програма буде створювати додаток з одним документом, додавати у меню File пункт Print Welcome, при виборі якого в клієнтській області вікна з’явиться текст «Практична робота №3».

Створіть додаток з одним документом Menus та за допомогою редактору меню необхідно додати нову команду в меню File програми.

Щоб запустити редактор меню перейдіть на вкладку ResourceView у вікні просмотру Visual C++. Знайдіть у списку рядок Menus і відкрийте її. Двічі клацніть на рядку IDR_MAINFRAME – це призведе до запуску редактору меню.

Необхідно додати нову команду Print Welcome. Для цього клацніть на меню файл, воно відкриється. Нова команда повинна з’явитися між існуючими Print та Print Preview, тому клацніть на Print Previеw і натисніть клавішу Insert – в меню з’явиться нова команда. Двічі клацніть на ній – відкриється діалогове вікно Menu Item Properties. Занесіть в поле Caption рядок Print Welcome. Новій команді одразу привласнюється ідентифікатор ID_FILE_PRINTWELCOME.

Нова команда внесена в меню.

1.3.2 Підключення команди меню до коду програми

Відкрийте Class Wizard у списку Object IDs вже присутній ідентифікатор ID_FILE_PRINTWELCOME. Тепер необхідно з’єднати команду з методом-обробником. Необхідно обрати клас виду. Виділіть рядок ID_FILE_PRINTWELCOME. Потім клацніть на рядку Command у списку Messages. Class Wizard запропонує привласнити обробнику ім’я OnFilePrintWelcome() – натисніть кнопку ОК. Після цього новий метод з’явиться в списку Member Functions вікна майстра. Двічі клацніть на цій функції.

void CMenusView::OnFilePrintwelcome()

{

// TODO: Add your command handler code here

}

Цей метод буде викликатися користувачем при виборі команди PrinteWelcome. Тому в цей метод необхідно помістити необхідний код.

Оголосіть та проініціалізуйте зміну StringData, як в попередніх програмах. В методі OnFilePrintwelcome() занесіть в об’єкт рядок:

void CMenusView::OnFilePrintwelcome()

{

// TODO: Add your command handler code here

CMenusDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDoc->StringData="Добро пожаловать.";

Invalidate();

}

Нарешті в метод OnDraw() додайте код для виводу рядка.

void CMenusView::OnDraw(CDC* pDC)

{

CMenusDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(0,0,pDoc->StringData);

// TODO: add draw code for native data here

}

1.3.3 Програма для повноцінної роботи з меню

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

Створіть додаток з одним документом fullmenus. Додайте нове меню Demo. В ньому будуть міститися блокована команда, відмічена команда та команда, що відкриватиме підменю.

В редакторі меню додайте нове меню Demo між File та Edit. Тепер необхідно додати команди. Перша команда Grayed. Ця команда буде блокованою, тобто недоступною для користувача. Дві інші команди Cheсked та Submenus.

1.3.4 Додавання клавіш прискореного виклику

Зверніть увагу, що перша літера меню і його команд підкреслені. Це означає якщо користувач натисне Alt+D то відкриється меню Demo. Якщо натиснути Alt+S при відкритому меню Demo, на екрані з’явиться підменю з додатковими командами.

Створити клавішу прискореного доступу просто – досить вставити символ «амперсанд» (&) перед тією буквою в назві меню або команди, яка буде використовуватися для прискореного виклику. Додайте клавішу прискореного виклику для створених команд. Для команди Greyed в полі Prompt додайте текст: «Команда заблокированна», цей текст буде виводитися в рядку стану як довідкова інформація.

1.3.5 Вивід довідки в рядку стану

Коли користувач виділяє команду меню, в рядку стану – полосі в нижній частині вікна програми – можна вивести додаткову інформацію про неї. Для цього досить помістити текст в поле Prompt вікна Menu Item Properties.

1.3.6 Додавання підменю

Щоб по команді Submenus на екрані з’являлось підменю необхідно:

  1. Двічі клацніть на команді Submenus.

  2. Встановіть прапорець Pop-up.

  3. Створіть дві додаткові команди в підменю Sub Item 1 та Sub Item 2.

1.3.7 Додавання акселератора

Акселератором називається сполучення клавіш, яке користувач може натиснути в будь-який момент і яке рівносильне вибору команди меню. Додайте сполучення клавіш Ctrl+F5 в команді Sub Item 2. Для цього:

  1. Перейдіть у вікно перегляду і відкрийте в списку папку Accelerator.

  2. Двічі клацніть на IDR_MAINFRAME в папці Accelerator – запуститься редактор акселераторів.

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

  4. Оберіть ідентифікатор ID_DEMO_SUBMENUS_SUDITEM2.

  5. Оберіть прапорець Ctrl.

  6. Оберіть у списку key VK_F5.

  7. Щоб вказати існування акселератору змініть назву для команди Sub Item 2 на Sub Item 2\tCtrl+F5 \t.

Акселератор готовий.

1.3.8 Додавання кнопок на панель інструментів

Будь-яку команду можна продублювати на панелі інструментів в вигляді кнопки. Створимо кнопку для команди Sub Item 2.

Для початку треба обрати зовнішній вигляд кнопки. Відкрийте у вікні перегляду папку Toolbar і клацніть на рядок IDR_MAINFRAME. Намалюйте зображення на ваш вибір. Клацніть на пустому квадратику і за допомогою панелі інструментів для малювання справа намалюйте кнопку.

Двічі клацніть на новій кнопці на панелі інструментів – відкриється вікно tullbar Button Properties. Оберіть зі списку ID_DEMO_SUBMENUS_SUBITEM1, для того щоб зв’язати кнопку панелі інструментів з командою меню. Занесіть в поле Promt текст Sun menu 1\nSub menu 1. Цей текст буде з’являтися в рядку стану при наведені на кнопку панелі інструментів.

1.3.9 Блокування команд меню

Необхідно заблокувати команду меню Grayed. Відкрийте Class Wizard і знайдіть в списку Object IDs рядок ID_DEMO_GRAYED. Тепер зв’яжіть з цим ідентифікатором метод-обробник, але замість відомої команди COMMAND клацніть в списку Messages на рядку UPDATE_COMMAND_UI. В результаті буде створений новий метод OnUpdateDemoGrayed():

void CFullmenusView::OnUpdateDemoGrayed(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

}

В цьому методі необхідно заблокувати команду меню; для цього необхідно викликати метод Enable() об’єкту CCmdUI, передавши йому значення false.

void CFullmenusView::OnUpdateDemoGrayed(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->Enable(false);

}

1.3.10 Відмічення команди меню

Необхідно створити метод OnUpdateDemoChecked () з повідомленням UPDATE_COMMAND_UI для команди Checked.

void CFullmenusView::OnUpdateDemoChecked(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

}

Щоб встановити помітку Cheked, спочатку розблокуємо її а потім викличемо метод SetCheck() об’єкту CCmdUI з аргументом 1.

void CFullmenusView::OnUpdateDemoChecked(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->Enable(true);

pCmdUI->SetCheck(1);

}

1.3.11 Додавання коду для команд підменю

Додавання коду для обслуговування команд підменю не відрізняється від звичайних команд. Створіть обробник для команди Sub Item 1:

void CFullmenusView::OnDemoSubmenuSubitem1()

{

// TODO: Add your command handler code here

}

Додайте до об’єкту документа рядковий об’єкт StringData і коли користувач виконає команду Sub Item 1 помістіть в нього відповідний текст:

void CFullmenusView::OnDemoSubmenuSubitem1()

{

// TODO: Add your command handler code here

CFullmenusDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDoc->StringData="Добро пожаловать.";

Invalidate();

}

Обробник команди Sub Item 2 виглядає так само, відрізняється лише текст, що виводиметься:

Включіть в метод OnDraw() код для виводу тексту по аналогії з попередньою програмою.

Програма готова запустіть її та перевірте роботу всіх проведених дій.