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


 

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

85553. Ознайомлення із життям і творчістю Тараса Шевченка. Т.Шевченко “Не цурайтесь того слова... “. О.Іваненко “Тарас у наймах.” 48 KB
  Мета: розширити знання учнів про життя і творчість Т.Шевченка; вчити передавати під час читання своє ставлення до прочитаного; вміння працювати над твором; продовжити роботу з вдосконалення навичок читання;розвивати мовлення учнів, пам’ять; виховувати співчуття до головного героя твору.
85554. Що таке байка і хто такий байкар? Л. Глібов «Лебідь, Щука і Рак», «Коник-стрибунець» 51 KB
  Ознайомити дітей із жанром байки; розширити знання про Л.Глібова; удосконалювати вміння читати діалоги розвивати способи і види читання байки образність мовлення уміння визначати повчальний висновок висловлювати оцінні судження; формувати комунікативну компетентність виховувати моральні якості.
85555. З книгою подружишся, розуму наберешся 204 KB
  Обладнання: таблиця Книга асоціативний кущ Живи книго виставка книг фото бібліотечних уроків презентація Історія книги. Книгаце духовна і моральна цінність набрання людства безцінний скарб. Які асоціації виникають у вас із словом книга Що для вас книга Яка вона ваша порадниця і помічниця...
85556. В. А. Сухомлинский «Петя, собака и котёнок» 67.5 KB
  Задачи: дать представление о доброте добрых делах учить рассуждать высказывать свои мысли строить текст по опорным словам и словосочетаниям продолжить работу над нарушенной последовательностью развивать речь воспитывать желание совершать добрые дела. На доске: Петя бежит собака испугался маленький...
85557. У ЗОЛОТО ВБРАЛАСЯ ЗЕМЛЯ 84.5 KB
  Матеріал до уроку: запис твору Еніо Маріконе Пори року фото Золота осінь зображення ЇжачкаЛісовичка осіннє листя малюнки овочів. Коли до нас приходить осінь за календарем Назвіть місяці осені. Чому вони так називаються Яку роботу виконує кожен із місяців осені Яка буває осінь Рання золота пізня.
85558. Зима-красуня, біла чарівниця! В ній стільки дива-дивного й краси! 44 KB
  Постарайтесь запамятати де вже побувала зима біловолоса б словникова робота полотно одпочить дугою скляною налилось верболіз очерет поневолі в повторне читання вірша учнями мовчки Що у вірші казкове а що відбувається насправді г аналіз вірша і вибіркове читання У яких рядках вірша зима змальована...
85559. «Наши корни» (с использованием миниатюр В.Сухомлинского) 149.5 KB
  У кого-то дерево с глубокими корнями в этих семьях хранится память не только о бабушках и дедушках но и о прабабушках и прадедушках. Мама папа бабушка дедушка. В соседней комнате на диване сидят дедушка и бабушка. Маленькая Аленка играет на полу плюшевым медвежонком и смотрит как папа мама дедушка...
85560. Шевченко великий співець України 96.5 KB
  Шевченка записи пісень на твори поета. Шевченка На дошці запис Нам стануть у пригоді: діти зачитують ваші попередні знання; повідомлення наших Шевченкознавців ; торбинка запитань; безсмертні Шевченкові вірші твори та малюнки; знання вчителя; пісні на слова Т. Шевченка. Тоді темної ночі перед світанком у селі Моринцях на Звенигородщині у хаті Григорія Шевченка кріпака пана Енгельгарда блиснув єдиний на...
85561. ЦІКАВА КНИГА ПРИРОДИ В.СУХОМЛИНСЬКИЙ «СЕРГІЙКОВА КВІТКА» 46.5 KB
  Вчити дітей бачити і розкривати красу природи. Заохочувати дітей до творчості. Розвивати мовлення, мислення дітей. Сприяти розвитку мовного апарату, пам’яті, вміння концентрувати увагу, володіти голосом. Виховувати любов і шанобливе ставлення до природи рідного краю.