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


 

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

30463. Принципы судоустройства и судопроизводства в зарубежных странах 14.95 KB
  Ни один государственный орган должностное или иное лицо не вправе указывать суду как ему следует решить то или иное дело; судьи решают дело на основе закона и личного убеждения. Нельзя отказывать в приеме дела по причинам отсутствия закона или его неясности. возможность обжалования и пересмотра судебного решения путем апелляции повторное рассмотрение дела по существу по процедуре первой инстанции кассации проверка выполнения закона судом. К числу особых принципов в сфере уголовного процесса относятся: право обвиняемого на...
30464. Конституционная юстиция в зарубежных странах 14.95 KB
  Существует несколько моделей конституционного контроля. Европейская модель конституционного контроля получила самое широкое распространение после Второй мировой войны постоянно совершенствовалась и теперь она воспринимается на других континентах. Для обоснования конституционного контроля использовались три основных теории12. Впрочем сами конституции в странах с такого рода режимами можно считать таковыми лишь условно: никакого конституционного строя там разумеется быть не может.
30465. Формы политико-территориального устройства в зарубежных странах 15.18 KB
  Главное различие между обеими формами заключается в том что при унитарной форме территория государства состоит из политикоадминистративных или административных единиц тогда как при федеративной форме высшие территориальные единицы представляют собой государствоподобные образования или даже государства субъекты федерации. означает не что...
30466. Принципы распределения компетенции между федерацией и ее субъектами в зарубежных странах 15.91 KB
  В первую очередь он механизм регулирует отношения равновесия на основе принципа разделения власти между всеми имеющимися центрами власти в государстве. С его помощью происходит реализация разграничения полномочий между ветвями власти без чего не может нормально функционировать не только федеративное государство но и любое другое. Вопервых разделение власти между центром и регионами имеет конституционноправовое обоснование. В случаях же возникновения коллизий между центром и регионами в отношении разделения власти...
30467. Статус субъектов федерации и иных носителей государственной автономии в зарубежных странах 14.96 KB
  Эти договоры не могут противоречить праву и интересам Союза а также правам других кантонов. С нижестоящими иностранными властями кантоны могут иметь дело непосредственно а в остальных случаях отношения кантонов с заграницей осуществляются через посредство Союза. В заключение следует отметить специфическую особенность трех кантонов Швейцарии это Аппенцелль Базель и Унтервальден которая заключается в том что каждый из них состоит из двух полукантонов а общекантональной власти там не существует. Каждый из полукантонов имеет свою...
30468. Основные модели организации публичной власти на местах в зарубежных странах 14.74 KB
  Для первых характерно избрание местной администрации местными представительными органами из своего состава причем нередко глава администрации мэр и т. но и главы местной администрации а также некоторых других должностных лиц исполнительной и судебной власти казначея прокурора мирового судьи вплоть до шерифа начальника полиции. Оно предполагает наличие у местной единицы собственной компетенции охватывающей вопросы местного значения; гарантированной конституцией и законом самостоятельности па отношению к государственной власти в...
30469. Договоры и конституционные процедуры разрешения конфликтов между федерацией и ее субъектами в зарубежных странах 15.77 KB
  Следует отметить возможность федеральной интервенции в случае конфликта между федеральной властью и властями субъектов федерации или в случае когда по каким либо причинам власть субъекта федерации не может функционировать нормально. Если земля не выполняет федеральные обязанности возложенные на нее Основным законом или иным федеральным законом то...
30470. Конституционная ответственность, ее субъекты и виды в зарубежных странах 14.2 KB
  В последнее время в литературе стали признавать наличие особого вида ответственности “конституционной†хотя до сих пор многие ее положения остаются дискуссионными. Так трудно согласиться с тем что конституционная ответственность является разновидностью политической ответственности а равно с тем что конституционная ответственностью объединяет в себе политическую моральную и юридическую ответственность. Конституционная ответственность это самостоятельный вид...
30471. Особенности Конституции и конституционного права США 14.92 KB
  Особенности Конституции и конституционного права США. Ныне действующая конституция США была принята 17 сентября 1787 г. Конституция США является выдающимся политикоправовым актом. Конституция США первая в истории писаная конституция крупного государства.