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 рекомендує використовувати для контекстних меню праву кнопку миші. Користувачі чекають саме такої поведінки інтерфейсу, і випробовуватимуть незручність, якщо розробник поступить інакше


 

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

51277. Распределение объема услуг предприятия бытового обслуживания 130.5 KB
  Выполнить распределение объема услуг предприятия по видам услуг и ассортименту изделий по форме табл. Определить объем бытовых услуг заданного предприятия структурного подразделения в форме табл.1 вначале по видам услуг затем по ассортименту изделий.
51278. Теплотехника и теплоэнергетика. Лабораторные работы 5.76 MB
  Вентиляторы это воздуходувные машины создающие определенное давление и служащие для перемещения воздуха при потерях давления в вентиляционной сети не более 12кПа. Вентиляторы высокого давления используют в основном для технологических целей например для дутья в вагранки в агломерационных установках для подачи воздуха к форсункам в фильтроочистительных системах и в системах пневмопочты. При вращении рабочего колеса 1 частицы воздуха увлекаются лопатками 2 во вращательное движение при этом на частицы воздуха действуют центробежные...
51279. Настройка параметров Windows 127 KB
  Microsoft Windows хранит информацию о конфигурации в двух местах: реестре и службе каталогов ctive Directory. Модификации реестра или ctive Directory приводят к изменению конфигурации Windows. Для настройки среды Windows прежде всего просматривает файл utoexec.
51283. ОПРЕДЕЛЕНИЕ ОСНОВНЫХ ХАРАКТЕРИСТИК СИСТЕМЫ ТОНКИХ ЛИНЗ 1.01 MB
  Линза называется тонкой если толщина линзы мала по сравнению с размерами сферических поверхностей ограничивающих линзу. Линзы бывают собирающими см. Оптический центр линзы точка через которую лучи идут не преломляясь. Фокусов у линзы два: задний и передний.
51284. Основные режимы движения механизма 907 KB
  При установившемся режиме скорость начального звена изменяется периодически. Причиной является периодический характер действия сил и моментов, приложенных к механизму, а также периодические изменения приведенного момента инерции механизма
51285. Изучение явления интерференции света с помощью бипризмы Френеля 82 KB
  Цель работы: Изучение поляризованного света явлений вращения плоскости поляризации в оптически активных растворах и магнитных полях определение постоянной вращения постоянной Верде и концентрация оптически активных растворов. Приборы и принадлежности: круговые поляриметры трубки с оптически активными соленоид выпрямитель миллиметровка Определение постоянной вращения сахарных растворов.5 По формуле вычислим концентрацию: Вывод: в ходе работы изучили: излучение поляризованного света явление вращения плоскости поляризации в...