C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 6 - Реакция на события / ActiveX по шагам / Приложение

Шаг 6 - Реакция на события

То что свойства есть это хорошо !!! Но вот теперь как заставить реагировать элемент на события. Это тоже просто, давайте в ответ на шелчок на нем мышкой сделаем вывод сообщения.

Открывайте наш проект. Опять View->ClassWizard. И переходит на вкладку ActiveX Events (события элемента). Обработка событий происходит в классе CDMyActive1Ctrl. Убедитесь, что он виден в окне ClassName. Теперь нам надо нажать на кнопку Add Event. В поле External name из выпадающего списка выбрать Click и нажать OK. И еще раз OK для закрытия диалогового окна.

Что произошло ? Посмотрите в ClassView - DDMyActive1Events, там добавилось Click.

6_1.gif (2376 b)

Теперь при шелчке на элементе поступит уведомление. Но нам надо обрабатывать это сообщение. Обработка должна быть сгенерирована в классе CDMyActive1Ctrl. Запускате ClassWizard, но выберите MessageMap. Убедитесь, что в окне Class name наш Ctrl класс. Найдите в окне Messages сообщение WM_LBUTTONDOWN. Щелкните по нему два раза. Оно должно стать черным, что говорит о его использовании. После этого выбирите Edit code и Вы попадете в место его нахождения.

Что произошло в CDMyActive1Ctrl ? Появилось описание карты сообщения в описании класса

....
// Message maps
  //{{AFX_MSG(CDMyActive1Ctrl)
  afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()
.....

И функция в файле реализации.

void CDMyActive1Ctrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	COleControl::OnLButtonDown(nFlags, point);
}

Изменим код:

void CDMyActive1Ctrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	AfxMessageBox("Click");
	COleControl::OnLButtonDown(nFlags, point);
}

Чтож, компилируем и запускаем наш макрос из VBA. Теперь куда бы Вы не нажали в диалоговой панели элемент ActiveX всё равно реагирует. Это плохо. Но с этим можно бороться :-) Там передаются параметры. Главное он реагирует на события из вне. Кстати когда вам это надоест нажмите Ctrl-Break и выполнение макроса прервется.


Загрузить проект | | |
Автор Каев Артем.
[AD]