Прозрачная заставка: часть 1 | часть 2 || Download
Обработка событий (управляемый код на C++)
(из книги "AutoCAD: разработка приложений, настройка и адаптация")
Добавление в форму элементов управления и обработка событий уже показаны в предыдущем разделе на примере
проекта Book16. Остановимся на некоторых моментах. Для примера возьмем элемент управления Button,
которым является кнопка диалогового окна. Button *bt = new Button(); После этого можно устанавливать значения свойств, например: Text, Size, Location,
BackGroundImage, BackColor, ForeColor, Font и т. д. Созданный объект затем
добавляется к семейству элементов управления формы: Controls->Add(bt); С каждым классом связано множество стандартных событий, которые можно программно обрабатывать (существует
также возможность создавать свои события). Перечислим некоторые события, связанные с кнопками Button:
Для того чтобы добавить к диалогу кнопку, необходимо создать новый объект соответствующего класса:
Для события необходимо создать функцию обратного вызова (callback function), которая будет вызываться
с целью анализа параметров события и выполнения некоторых действий. Чаще всего имена функций назначаются
похожими на имена событий. Например, для события Click объекта Button можно ожидать, что имя
вызываемой функции будет OnClick, OnButtonClick или OnBtClick.
С каждым из выбранных событий следует связать обработчик - это объект класса EventHandler.
Именно этот обработчик по возникновении события вызывает нужную функцию.
Например, если мы для события Click создаем обработчик, который должен вызвать функцию Wform16::OnBtClick,
то оператор создания обработчика в конструкторе класса формы Wform16 будет выглядеть так:
add_Click(new EventHandler(this, &Wform16::OnBtClick));
Или то же самое, но в более современной форме с использованием перегруженного оператора +=:
bt->Click += new EventHandler(this, &Wform16::OnBtClick);
Для некоторых событий (например, для события Paint) существует другой вариант того же:
Paint += new PaintEventHandler (this, OnPaint);Последняя форма очень похожа на добавление обработчика на языке C# (см. главу 7
книги).
Каждой функции обратного вызова передаются два аргумента - указатель на объект, чье событие сгенерировано,
и дополнительные данные о событии. Например:
void Wform16:: OnTimerTick(Object *sender, System::EventArgs *ea)
Первый аргумент имеет универсальный тип System::Object*, поэтому при использовании его необходимо приводить к нужному типу (с помощью оператора static_cast - см. листинг 5.36).