Прозрачная заставка: часть 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).


Прозрачная заставка: часть 1 | часть 2 || Download