Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KP_SPZ_v11-2015.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
732 Кб
Скачать
☆
  1. Розробка меню програми

    1. Головне меню програми

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

Рисунок 3.1 – Атрибути меню у вікні властивостей

Процес створення меню в MFC-програмах, як і в API-програмах, складається із трьох етапів:

  • створення шаблона меню;

  • підключення ресурсу меню до головної програми;

  • обробка повідомлень від команд меню [3].

Підключення меню в програму базується на використанні методу Create() класу CFrameWnd, який створює головне вікно програми. В цьому методі можна вказати спеціальний макрос MAKEINTRESOURCE, аргументом якого буде ідентифікатор ресурсу меню. В результаті отримаємо:

Create(NULL," Курсова робота, ст. гр. 3К-14 Семенюк М.В.",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,

MAKEINTRESOURCE(IDR_MAINFRAME));

Ідентифікатори меню та всіх пунктів меню мають бути представлені в заголовочному файлі ресурсів Resource.h:

#define IDM_PICTURE 40004

…

#define IDM_QUIT 40017

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

Тепер можна перейти до третього етапу створення меню – обробки повідомлень від команд меню. В головному програмному файлі проекту необхідно виконати такі дії.

1. В класі вікна з рамкою CMyFrameWnd оголосити функції-обробники всіх пунктів меню.

2. Включити в карту повідомлень MESSAGE_MAP макроси, які зв’язують ідентифікатори кожного пункту меню з функцією-обробником.

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

class CMyFrameWin:public CFrameWnd

{

public:

CMyFrameWin();

protected:

afx_msg void OnPicture();

...

afx_msg void OnQuit();

DECLARE_MESSAGE_MAP();

};

BEGIN_MESSAGE_MAP(CMyFrameWin, CFrameWnd)

ON_COMMAND(IDM_PICTURE, OnPicture)

...

ON_COMMAND(IDM_QUIT, OnQuit)

END_MESSAGE_MAP();

void CMyFrameWin:: OnPicture()

{

}

...

void CMyFrameWin:: OnQuit()

{

}

    1. Таблиця акселератора

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

Щоб комбінація клавіш стала працювати як акселератор, вона повинна бути описана в таблиці акселераторів і додаток повинен завантажити таблицю акселераторів з ресурсів.

Створення таблиці відбувається добавленням нового ресурсу Accelerator в пункті меню Edit - Add Resource.

Для завантаження таблиці акселераторів використовується функція:

this->LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME));

Зовнішній вигляд вікна властивостей та список акселераторів показано на рисунку 3.

Рисунок 3 – Вікно властивостей акселератора

По замовчуванню, коли клавіша акселератора відповідає пункту меню, система виділяє цей пункт меню.

    1. Контекстне меню програми

Контекстне меню створюється за допомогою класу CMenu:

CMenu menu;

Створивши екземпляр класу CMenu, для створення контекстного меню необхідно скористатись функцією CreatePopupMenu().

menu.CreatePopupMenu();

Контекстне меню буде виводитись при натисненні правої клавіші миші на робочому полі програми. Для цього необхідно описати функцію обробника повідомлень ON_WM_RBUTTONDOWN():

void CMyFrameWin::OnRButtonDown(UINT nFlags, CPoint point)

{

CPoint t;

GetCursorPos(&t);

PopupMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,t.x, t.y, this);

}

Також, в конструкторі класу CMyFrameWin необхідно завантажити контекстне меню в пам'ять. Це робиться за допомогою метода LoadMenu, він зв’язує об’єкт зі створеним раніше візуальним меню.

PopupMenu.LoadMenu(IDR_POPUPMENU);

Контекстне меню створюється так само як головне меню – шляхом додання нового ресурсу Menu. Зовнішній вигляд контекстного меню показано на рисунку 4.

Рисунок 4 – Контекстне меню програми

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