69269

Контекстні меню

Лекция

Информатика, кибернетика и программирование

З моменту дебюту Windows 95 корпорація Microsoft забезпечує застосування контекстних меню. Контекстне меню (context menu), іноді зване спливаючим меню (popup menu), ніяк не сполучене з рядком меню. Воно відображається у тому випадку, коли користувач, вибравши об’єкт, клацає правою кнопкою миші.

Украинкский

2014-10-02

33.5 KB

0 чел.

Лекція № 11

Тема: Контекстні меню

Контекстні меню

З моменту дебюту Windows 95 корпорація Microsoft забезпечує застосування контекстних меню. Контекстне меню (context menu), іноді зване спливаючим меню (popup menu), ніяк не сполучене з рядком меню. Воно відображається у тому випадку, коли користувач, вибравши об'єкт, клацає правою кнопкою миші. (Іноді одиночне клацання правої кнопки миші дозволяє одночасно вибрати об'єкт і викликати контекстне меню.) Інтегроване середовище розробки Visual C++ широко застосовує цей тип меню, як втім і багато інших застосувань, доступних на ринку. Починаючи з Windows 95, контекстні меню для відробітку численних стандартних операцій використовує сама операційна система. Щоб створювані застосування відповідали стилю і можливостям цього середовища, необхідно звернути увагу і на наявність в них контекстних меню.

Крім клацання правої кнопки миші, користувач може викликати контекстне меню за допомогою клавіатури. Клавіша <Applications>, що з'явилася в нових 104-клавішних клавіатурах типу Microsoft Natural keyboard, дозволяє користувачам відкривати контекстне меню7. Для тих користувачів, чиї клавіатури не обладнані цією клавішею, в додатку слід визначити акселератор <Shift+F10>, вживаний зазвичай для виклику контекстних меню.

Подібно до більшості інших об'єктів MFC, об'єктів API Windows, що є оболонками, створення повнофункціонального об'єкту контекстного меню здійснюється в два етапи. Спочатку об'єкт C++ розміщується в пам'яті, а потім ініціалізувався. Приведений нижче фрагмент коди демонструє один із способів створення і ініціалізації об'єкту класу CMenu:

// Розмістити в пам'яті об'єкт CMenu контекстного меню.

g_pmenuContext = new CMenu ();

if (!g_pmenuContext) return -1;

// Ініціалізувати CMenu (підключити меню до об'єкту меню MFC).

BOOL bSuccess = g_pmenuContext->LoadMenu(IDR__CONTEXT);

if (!bSuccess) return -1;

Цей фрагмент коди належить функції (обробникові повідомлення WM_CREATE), що повертає значення -1 у разі будь-якої відмови. Для розміщення в пам'яті використовується оператор new. Ініціалізація полягає в зверненні до функції CMenu: :LoadMenu, яка приймає як аргумент тільки один параметр — ідентифікатор ресурсу меню.

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


void
 CMainFrame::OnRButtonDown(UINT nFlags, CPoint point) {

// Перетворити координати клієнтської області

// у координати екрану.

ClientToScreen(&point);

// Відобразити контекстне меню в розташуванні курсора миші.

CMenu *psubmenu = g_pmenuContext->GetSubMenu(0);

psubmenu->TrackPopupMenu(TPM_LEFTALIGN | // Прапори

TPM_RIGHTBUTTON

point.x, // координата х

point.у // координата у

this); // поточне (this) вікно

CFrameWnd::OnRButtonDown(nFlags, point);

}

Другий з параметрів функції OrtRButtonDown є розташуванням курсора миші в координатах клієнтської області. Але функції TrackPopupMenu потрібні екранні координати, тому за допомогою функції CWnd::ClientToScreen отримані координати клієнтської області (почало яких знаходиться у верхньому лівому кутку клієнтської області) перетворяться в екранні координати (почало яких знаходиться у верхньому лівому кутку екрану).

Більшість параметрів функції CMenu::TrackPopupMenu зрозумілі і без пояснень. Проте останній параметр варто обговорити. Контекстне меню, що з'явилося, повинне включитися в потік повідомлень, що створюються і передаваних між вікнами. Покажчик this, в контексті класу похідного від CFrameWnd, ідентифікує вікно, яке повинне отримати повідомлення цього меню.

Останньою темою, що підлягає розгляду в цьому розділі, є видалення контекстного меню після закінчення роботи з ним. Для цього досить видалити відповідний об'єкт класу CMenu. Подібно до всіх останніх елементів постійної таблиці карти дескрипторів, коли об'єкт-контейнер виявляється видалений, системний об'єкт також віддаляється з пам'яті, так само як і відповідний елемент карти дескрипторів. Не дивлячись на те, що об'єкт меню можна видалити в одному з декількох місць, робити це рекомендується в деструкції об'єкту фреймового вікна:

CMainFrame::~CMainFrame ()

{

if (g_pmenuContext)

g_pmenuContext->DestroyMenu();

}

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


 

А также другие работы, которые могут Вас заинтересовать

74246. Объектно-ориентированное программирование. Теоретические основы ООП 372.5 KB
  В основе любого языка лежит некоторая идея, оказывающая существенное влияние на стиль программ. Исторически первой была идея процедурного программирования.
74247. Технические средства ЭВМ 138.49 KB
  В основе функционирования любой ЭВМ лежит архитектура. В современных ЭВМ АЛУ и УУ объединены в общее устройство называемое центральным процессором. Схема архитектуры ЭВМ базирующаяся на принципах фон Неймана.
74248. Программное обеспечение ЭВМ и информационные технологии 199.8 KB
  Сообщение это форма представления информации для ее последующей передачи в одном из следующих видов: числовая форма представленная цифрами; текстовая форма представленная текстами составленными из символов того или иного языка; кодовая форма представленная кодами; например кодами в двоичной системе счисления кодами для сжатия или шифрования кодами азбуки Морзе или азбуки для глухонемых и т. Системы счисления Система счисления это соглашение о представлении чисел посредством конечной совокупности символов цифр...
74249. Программное обеспечение ЭВМ. Классификация программного обеспечения 382 KB
  Совокупность программ, процедур и правил, а также документации, связанных с функционированием системы обработки данных, составляют программное обеспечение (ПО; software). Программное и аппаратное обеспечение в ЭВМ работают в неразрывной связи и взаимодействии.
74250. ПРЕДСТЕРИЛИЗАЦИОННАЯ ОБРАБОТКА 258.5 KB
  Самостоятельная работа лабораторного занятия предусматривает знакомство студентов с инструкциями (методическими рекомендациями) по применению моюще-дезинфицирующих средств, нормативными документами, а также отработку техники манипуляций и решение ситуационных задач.
74251. СТЕРИЛИЗАЦИЯ. ПРИНЦИПЫ РАБОТЫ ЦСО 197 KB
  На данном занятии изучаются методы стерилизации, которые являются важнейшим аспектом программы профилактики ИСМП в медицинских организациях. Студенты должны четко осознавать важность стерилизационных мероприятий и овладеть знаниями и навыками, необходимыми для их осуществления.
74252. Личная гигиена тяжелобольного пациента. Утренний туалет 98.78 KB
  Личная гигиена тяжелобольного пациента. Отрабатывают навыки по уходу за волосами стрижку ногтей на руках ногах умывание пациента уход за слизистыми очищение наружного слухового прохода. Обучение пациента и его семьи элементам ухода. ОСНАЩЕНИЕ: тестовые задания 2 уровень задание для деловой игры таблица Личная гигиена пациента.
74253. УЧАСТИЕ МЕДСЕСТРЫ В ЛАБОРАТОРНЫХ МЕТОДАХ ИССЛЕДОВАНИЯ 169.51 KB
  Входной контроль знаний с эталонами ответов по теме Сбор мочи и взятие мазка из носа зева и носоглотки для лабораторных исследований. Манипуляции с алгоритмом по теме Сбор мочи и взятие мазка из носа зева и носоглотки для лабораторных исследований. Ситуационные задачи проблемного характера сценарий деловой игры элементы деловой игры по теме Сбор мочи и взятие мазка из носа зева и носоглотки для лабораторных исследований. Итоговый контроль тестовые задания письменная работа по теме Сбор мочи и взятие...
74254. УЧАСТИЕ МЕДИЦИНСКОЙ СЕСТРЫ В ИНСТРУМЕНТАЛЬНЫХ МЕТОДАХ ИССЛЕДОВАНИЯ 100.55 KB
  Значительная роль в диагностике многих заболеваний принадлежит инструментальным методам исследования. Достоверность и точность инструментальных методов исследования зависят от того насколько правильно и тщательно медицинская сестра подготовила пациента к его проведению. ЦЕЛИ: Учебная: доказать важность и необходимость...