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


 

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

84589. Поворотно-протипоточна система нирок її фізіологічні механізми і роль 52 KB
  Поворотнопротипоточна система нирки ППСН забезепчує при необхідності: розведення сечі тобто виводить у великому обємі води малу кількість солей та метаболітів. Так нирки працюють при надлишку води в організмі наприклад при надлишковому її прийомі. концентровання сечі тобто виводять у малому обємі води велику кількість солей та метаболітів. Регуляція реабсорбції йонів натрію і води в канальцях нирки.
84590. Роль нирок в забезпеченні кислотно-основного стану крові 38.28 KB
  Роль нирок у підтримці кислотноосновного стану крові повязана із здатністю епітеліоцитів ниркових канальців секретувати протони які надалі виводяться з організму. Протони секретуються в просвіт канальців а бікарбонатні йони реабсорбуються у кров. Протони котрі секретуються нирковим епітелієм взаємодіють з різними компонентами сечі.
84591. Фізіологія як наука. Поняття про функцію. Методи фізіологічних досліджень 44.59 KB
  Нормальна фізіологія наука про обєктивні закономірності протікання функцій організму в їх взаємозвязку і у взаємодії організму із зовнішнім середовищем. Функція це діяльність і властивість клітин органів систем організму які проявляються як фізіологічний процес чи сукупність процесів. Неспецифічні притаманні багатьом чи всім тканинам та клітинам організму. Обєктом фізіологічного дослідження є функція організму його систем органів і клітин.
84592. Потенціал спокою, його параметри, механізми походження та фізіологічна роль 49.49 KB
  Формула Нернста для розрахунку величини ПС: де R універсальна газова стала T абсолютна температура F число Фарадея [K і] концентрація іонів К в клітині [K е] концентрація іонів К поза клітиною. Особливостями проникності мембрани клітини в стані спокою вона проникна для іонів К та непроникна для іонів N. Цей білок на внутрішній поверхні мембрани розщеплює АТФ на АДФ та фосфат й використовує енергію що виділилась на транспортування трьох іонів N з клітини та двох іонів К в клітину. Отже за рахунок роботи НКН...
84593. Потенціал дії, його параметри, механізми походження та фізіологічна роль 47.44 KB
  При внутрішньоклітинній мікроелектродній реєстрації ПД окремої клітини має такий вигляд: Спочатку мембранний потенціал різко зменшується до нуля 1 фаза деполяризації ПД; потім заряд мембрани змінюється на протилежний зовні всередині 2 фаза реверсполяризації. Далі мембранний потенціал поступово повертається до вихідного рівня 3 фаза реполяризації ПД. Так розвивається фаза деполяризації ПД. Але вхід іонів N в клітину не припиняється й тепер у клітині створюється надлишок позитивних іонів N а на її поверхні надлишок аніонів...
84594. Збудливість. Критичний рівень деполяризації поріг деполяризації клітинної мембрани 43.2 KB
  Критичний рівень деполяризації поріг деполяризації клітинної мембрани. Пороговий потенціал ΔV різниця між ПС та критичним рівнем деполяризації мембрани Екр. Критичний рівень деполяризації той рівень мембранного потенціалу при зменшені до якого ПС на мембрані виникає ПД. Тобто чим менший поріг деполяризації тим вища збудливість клітини та навпаки.
84595. Зміни збудливості клітини при розвитку одиничного потенціалу дії 46.03 KB
  При розвитку на мембрані місцевого збудження та ПД збудливість клітини змінюється порізному: при розвитку місцевого збудження збудливість збільшується так як ΔV зменшується; при розвитку ПД мають місце закономірні зміни збудливості: поки деполяризація повільно прямує до Екр збудливість збільшується вище вихідного рівня вище 100 фаза супернормальної збудливості; к тільки деполяризація доходить до Екр й починається розвиток піку ПД збудливість клітини падає до нуля та починається фаза абсолютної рефрактерності повної...
84596. Значення параметрів електричних стимулів для виникнення збудження 43.28 KB
  Під анодом виникає гіперполяризація а під катодом деполяризація мембрани внаслідок складання зовнішнього та власного електричного поля. Коли під катодом відбувається деполяризація мембрани й досягає 5075 від величини порогового потенціалу в мембрані відкриваються потенціалчутливі натрієві канали через них в клітину входять іони N збільшення ступеню деполяризації під катодом. Деполяризація під катодом що повязана з відкриттям натрієвих каналів та з входом іонів N в клітину має назву локальної відповіді ЛВ. Таким чином при дії на...
84597. Механізми проведення збудження по нервових волокнам 46.51 KB
  Швидкість збільшення сили відповідає швидкості піку ПД майже відповідає швидкості збільшення сили при дії прямокутних імпульсів електричного струму набагато вища порогу. Отже на збуджену ділянку мембрани нервового волокна діє катодний електричний струм сила час дії та швидкість збільшення сили якого вищі порогу цей струм викличе деполяризацію мембрани до Екр викличе ПД на мембрані незбудженої ділянки. Ці струми в ділянці незбуджених перехватів мають вихідний напрямок; їх сила амплітуда ПД тривалість тривалість ПД швидкість...