69268

Створення обробників подій меню

Лекция

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

Після того, як ресурс меню буде створений, можна переходити до розробки коди, пов’язаної з подіями пунктів меню. Щоб побачити цей процес у дії, досить клацнути правою кнопкою миші на пункті меню ID_SPEAK_BEFORMAL і в контекстному меню, що з’явилося, вибрати пункт Add Event Handler...

Украинкский

2014-10-02

30.5 KB

0 чел.

Лекція № 10

Тема: Створення обробників подій меню

Після того, як ресурс меню буде створений, можна переходити до розробки коди, пов'язаної з подіями пунктів меню. Щоб побачити цей процес у дії, досить клацнути правою кнопкою миші на пункті меню ID_SPEAK_BEFORMAL і в контекстному меню, що з'явилося, вибрати пункт Add Event Handler (Додати обробник події) (мал. 4.5).

Перше, на що необхідно звернути увагу в цьому діалоговому вікні, — це поле Command name (Ім'я команди), в якому вказаний ідентифікатор пункту меню. Як можна буде відмітити незабаром, воно зіграє істотну роль при створенні коди. Тепер звернете увагу на список Message type (Тип повідомлення), де пропонується на вибір два типи повідомлень; COMMAND і UPDATE_COMMAND__UI.

Повідомлення типу WM_COMMAND передається при виборі користувачем пункту меню. Код обробника такого повідомлення виконуватиметься при кожному виборі користувачем даного пункту меню. Якщо MFC не зможе знайти відповідний обробник повідомлення типу WM_COMMAWD для даного пункту меню, то цей пункт меню буде автоматично заблокований і стане недоступний для користувача.

Повідомлення типу ON__UPDATE_COMMAND_UI не є повідомленням Windows, це швидше запит середовища виконання MFC на оновлення зовнішнього вигляду окремих пунктів меню. Обробники подій подібних повідомлень, іноді звані обробниками команд призначеного для користувача інтерфейсу (COMMANDUI handler), призначені для розміщення коди здатного виконувати такі дії, як розміщення прапорця поряд з пунктом меню, виділення його сірим кольором або блокування пункту меню. Ось невеликий приклад обробника команд призначеного для користувача інтерфейсу, який виконує подібні завдання на підставі значень змінних додатку.

void CMainFfame::OnUpdateCheckedMenuItem(CCmdUI* pCmdUI)

{

// Якщо g_bMenuCheeked в стані TRUE, то прапорець

// буде встановлений, а інакше знятий.

pCmdUI->SetCheck( g_bMenuChecked );

// Якщо g_bMenuEnable в стані TRUE, то пункт  

// доступний, а інакше виділений сірим.

pCmdUI->Enable( g bMenuEnable );

}

Як видно з цього фрагмента коди, обробникам команд призначеного для користувача інтерфейсу передається покажчик на об'єкт класу CCmdUI, виклик функцій-членів якого дозволяє управляти станом пунктів меню. Наприклад, щоб на підставі алгоритму додатку заблокувати пункт меню, досить викликати функцію CCmdUI:: Enable, передавши їй як аргумент значення FALSE.

Наступний елемент діалогового вікна майстра Event Handler Wizard, на якого має сенс звернути увагу, — це Class list (Список класів). Саме тут можна вказати середовищу розробки Visual Studio, в який з класів необхідно додати обробник події. Ето рішення повністю залежить від переваг розробника і від особливостей архітектури створюваного застосування. Проте, щоб насправді осмислено ухвалювати це рішення, необхідно мати уявлення про деякі особливості маршрутизації повідомлень MFC.

Адресатом більшості повідомлень, що обробляються а додатках MFC, є один тип об'єкту: вікно. Виходячи з моделі, використовуваною API Windows, і даного типу повідомленні, це, ймовірно, має сенс. Врешті-решт, такі повідомлення як WM__CREATE, WM_MOVE і HM_SIZE повідомляють вікно про необхідність створення, переміщення або зміни розмірів. У API Windows і в MFC тільки об'єкт вікна зацікавлений в таких подіях. Крім того, дані повідомлень, що не відносяться до самого вікна (наприклад, повідомлення миші і клавіатури), призначені для передачі цілком певному конкретному вікну, отже, їх переадресація приведе до серйозного збою.

У обробці повідомлень меню MFC спирається на функції, API Windows, що надаються. Якщо додаток створює команди меню, то фреймові вікна, що містять це меню, не повинні обробляти ці повідомлення. Замість них цю роботу повинні виконувати обробники повідомлень (такі як обробник WM_COMMAND) розташовані усередині об'єктів, що володіють тими ресурсами, якими дана команда виконується. Кандидатами на обробку повідомлень меню є класи, похідні від CCradTarget, які здатні створювати вікна (наприклад, вікна уявлення), а також об'єкти додатку (класи яких походять від CWinApp). У додатку архітектури документ/уявлення, і об'єкт документа, і об'єкт уявлення є вікнами, тому обидва вони також є кандидатами на обробку повідомлень меню.

Не дивлячись на те, що будь-який клас, похідний від CCmdTarget, здатний отримувати повідомлення меню, фактичні повідомлення передаються при маршрутизації по цілком певному шляху. У табл. 4.2 приведений порядок, в якому MFC перевіряє карту повідомлень при доставці командних повідомлень в додатку, що не відноситься до архітектури документ/уявлення, в додатку архітектури документ/уявлення з одним документом і в додатку архітектури документ/уявлення з безліччю документів.

Отже, основи розробки меню вивчені. У цьому розділі було описано, що таке ресурси меню, як створювати їх і як забезпечити взаємодію з додатком. Щоб створити справжній працездатний інтерфейс меню, необхідно забезпечити його клавішами акселератора. Це і буде наступною темою даного розділу.


 

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

81526. Биохимические основы возникновения и проявления наследственных болезней (разнообразие, распространение) 104.52 KB
  За этой группой следуют белки модулирующие функции белков и участвующие в правильном сворачивании полипептидных цепей. Хорошо изученными наследственными заболеваниями связанными с нарушением синтеза α или βцепей НЬ являются талассемии. Синтез α и βцепей в норме регулируется таким образом что все молекулы протомеров используются на синтез тетрамера α2β2 Талассемии возникают как результат мутаций включающих замены или делеции одного или нескольких нуклеотидов а иногда и целого гена кодирующего структуру одного из протомеров....
81527. Основные системы межклеточной коммуникации: эндокринная, паракринная, аутокринная регуляция 100.4 KB
  По расстоянию от клетки продуцента гормона до клеткимишени различают эндокринный паракринный и аутокринный варианты регуляции. Клеткимишени могут отстоять от эндокринной клетки сколь угодно далеко. Пример: секреторные клетки эндокринных желёз гормоны из которых поступают в систему общего кровотока. Примеры: эндотелины вырабатываемые клетками эндотелия и воздействующие на эти же эндотелиальные клетки; Тлимфоциты секретирующие интерлейкины имеющие мишенями разные клетки в том числе и Тлимфоциты.
81528. Роль гормонов в системе регуляции метаболизма. Клетки-мишени и клеточные рецепторы гормонов 106.94 KB
  Клеткимишени и клеточные рецепторы гормонов Роль гормонов в регуляции обмена веществ и функций. Физиологический эффект гормона определяется разными факторами например концентрацией гормона которая определяется скоростью инактивации в результате распада гормонов протекающего в основном в печени и скоростью выведения гормонов и его метаболитов из организма его сродством к белкампереносчикам стероидные и тиреоидные гормоны транспортируются по кровеносному руслу В комплексе с белками количеством и типом рецепторов на поверхности...
81529. Механизмы передачи гормональных сигналов в клетки 98.08 KB
  По механизму действия гормоны можно разделить на 2 группы. К первой группе относят гормоны взаимодействующие с мембранными рецепторами пептидные гормоны адреналин а также гормоны местного действия цитокины эйкозаноиды. Вторая группа включает гормоны взаимодействующие с внутриклеточными рецепторами.
81531. Строение, синтез и метаболизм иодтиронинов. Влияние на обмен веществ. Изменение метаболизма при гипо- и гипертиреозе. Причины и проявление эндемического зоба 160.08 KB
  Биосинтез йодтиронинов. Из цистерн ЭР Тиреоглобулин поступает в аппарат Гольджи включается в состав секреторных гранул и секретируется во внеклеточный коллоид где происходит йодирование остатков тирозина и образование йодтиронинов. Йодирование тиреоглобулина и образование йодтиронинов осуществляется в несколько этапов Транспорт йода в клетки щитовидной железы. Образование йодтиронинов.
81532. Регуляция энергетического метаболизма, роль инсулина и контринсулярных гормонов в обеспечении гомеостаза 107.55 KB
  Абсорбтивный период характеризуется временным повышением концентрации глюкозы аминокислот и жиров в плазме крови. Изменения метаболизма в печени в абсорбтивном периоде После приёма пищи печень становится главным потребителем глюкозы поступающей из пищеварительного тракта. Почти 60 из каждых 100 г глюкозы транспортируемой портальной системой задерживается в печени. Увеличение потребления печенью глюкозы не результат ускорения её транспорта в клетки транспорт глюкозы в клетки печени не стимулируется инсулином а следствие ускорения...
81533. Изменения метаболизма при сахарном диабете. Патогенез основных симптомов сахарного диабета 115.42 KB
  При недостаточности содержания инсулинавозникает заболевание которое носит название сахарный диабет: повышается концентрация глюкозы в крови гипергликемия появляется глюкоза в моче глюкозурия и уменьшается содержание гликогена в печени. При введении инсулина больным диабетом происходит коррекция метаболических сдвигов: нормализуется проницаемость мембранмышечных клеток для глюкозы восстанавливается соотношение между гликолизом и глюконеогенезом. В связи с этим при инсулярной недостаточности и сохранении или даже повышении...
81534. Патогенез поздних осложнений сахарного диабета (макро- и микроангиопатии, нефропатия, ретинопатия, катаракта). Диабетическая кома 108.17 KB
  Диабетическая кома. Диабетическая ретинопатия поражение сетчатки глаза в виде микроаневризм точечных и пятнистых кровоизлияний твёрдых экссудатов отёка образования новых сосудов. Диабетическая микро и макроангиопатия нарушение проницаемости сосудов повышение их ломкости склонность к тромбозам и развитию атеросклероза возникает рано поражаются преимущественно мелкие сосуды. Диабетическая полинейропатия чаще всего в виде двусторонней периферической нейропатии по типу перчаток и чулок начинающаяся в нижних частях конечностей.