Обсуждение статьи "Графические интерфейсы II: Настройка обработчиков событий библиотеки (Глава 3)"

 

Опубликована статья Графические интерфейсы II: Настройка обработчиков событий библиотеки (Глава 3):

В предыдущих статьях были реализованы классы для создания всех составных частей главного меню. Теперь же настало время познакомиться с обработчиками событий в главных базовых классах и в классах созданных элементов управления. Отдельное внимание уделено управлению состоянием графика в зависимости от того, где находится курсор мыши.


Персональные массивы элементов

Проведем небольшой эксперимент. Нажмем левую кнопку мыши на одном из пунктов контекстного меню в той его области, где курсор мыши будет вне области формы. Мы увидим, что прокрутка графика не отключена, и её можно осуществлять, находясь над элементом управления. Это ошибка в функционале, такого быть не должно. Поэтому далее мы сделаем так, чтобы, над каким элементом управления ни находился бы курсор мыши, прокрутка графика и режим перемещения торговых уровней в этот момент были отключены. 

В первую очередь, добавим в обработчик контекстного меню отслеживание фокуса на элементе (см. код ниже). Если контекстное меню скрыто, то действовать дальше смысла нет. Такого подхода стоит придерживаться везде для экономии времени.

Предварительный тест обработчиков событий

После того, как внесены все изменения, нужно скомпилировать все файлы и загрузить программу на график для тестирования. Теперь при нажатии на независимый пункт меню на форме его контекстное меню будет появляться, если было скрыто до этого, и, наоборот, скрываться, если было открыто. При этом, когда контекстное меню открыто, то цвет фона пункта меню на форме будет фиксироваться — то есть, не будет вновь изменяться, если убрать курсор мыши из его области (см. скриншот ниже). 

Рис. 1. Тест показа и скрытия контекстного меню.

Рис. 1. Тест показа и скрытия контекстного меню.

Автор: Anatoli Kazharski

 

Функция void CContextMenu::ReceiveMessageFromMenuItem(const int id_item,const int index_item,const string message_item)

не отправляет сообщение состояние чекбокса, если пункт имеет такой тип. А так в общем библиотека очень хорошая)