Крок 5: Додавання події

Тепер буде додано на ClickIn та ClickOut подією для вашого контролю ATL. Буде стріляти в ClickIn випадку, якщо користувач натискає в рамках багатокутника та вогню ClickOut Якщо натиснути за межами.

Коли ви створили повний контроль на кроці 2, ви вибрали Підтримки точки з'єднання перевірити box.  Це створений в IPolyCtlEvents інтерфейс у файлі .idl.  Зауважте, що назва інтерфейсу починається на знаки підкреслення. Це Конвенція, щоб вказати, що інтерфейс внутрішнього інтерфейсу. Таким чином, програми, які дають змогу переглядати об'єкти COM можна не відображення інтерфейсу користувача. Також повідомлення у файлі .idl що Підтримки точки з'єднання додати лінію, щоб вказати, що IPolyCtlEvents є типовим інтерфейсом джерело. Джерело атрибут вказує на те, що це джерело повідомлення, так що він буде викликати цей інтерфейс на контейнер.

Тепер ви повинні додати ClickIn та ClickOut методи IPolyCtlEvents інтерфейс:

  1. Клацніть правою кнопкою на IPolyCtlEvents в ClassView і вибрати Додати забавна з контекстного меню.

  2. Виберіть на повернення типуvoid.

  3. Тип ClickIn в полі Ім'я методу.

  4. Введіть [in] long x, [in] long y у вікні Параметри.

  5. Натисніть кнопку ОК.

Перевірте файл .idl, щоб побачити, що код був доданий як засіб в IPolyCtlEve&nts dispinterface.nbsp; Потім використовувати таку саму процедуру для визначення на ClickOut методу з аналогічними параметрами та тип.  Ваш файл .idl, dispinterface IPolyCtlEvents повинен тепер виглядати наступним чином:

dispinterface _IPolyCtlEvents
{
   Властивості:
   методів:
   [id(1), helpstring ("метод ClickIn")] до втрати ClickIn ([в] довгий x, [в] довгий y);
   [id(2), helpstring ("метод ClickOut")] до втрати ClickOut ([в] довгий x, [в] довгий y);
}

На ClickIn і ClickOut методів, які беруть x та y координат використання точки як параметри.

Тепер створити тип бібліотеки. Для цього можна або відновити ваш проект або клацніть правою кнопкою миші FileView , файл .idl та натисніть кнопку Компілювати Polygon.idl. Буде створено файл Polygon.tlb, який тип бібліотеки.

Далі, здійснювати інтерфейсом точка підключення та підключення до точки контейнер інтерфейс для вашого контролю. (В ком, події реалізуються через механізм точки з'єднання. Отримати події з об'єктом COM, контейнер встановлює Консультативної підключення до точку з'єднання, що реалізує COM-об'єкта. Оскільки об'єкт COM можна мати декілька точок підключення, об'єкт COM також реалізує підключення до точки контейнер інтерфейс. Через цей інтерфейс контейнер може визначити які точки підключення підтримуються.) Інтерфейс, який реалізує точка підключення називається IConnectionPoint і інтерфейс, який реалізує контейнер точки підключення називається IConnectionPointContainer.

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

Щоб запустити майстер, виконайте такі дії.:

  1. Перейти до ClassView (у меню Вигляд виберіть пункт робочої області , щоб побачити ClassView).

  2. Клацніть правою кнопкою на вашого контролю реалізації класу, в цьому випадку CPolyCtl.

  3. У контекстному меню виберіть Здійснювати підключення до точки....

  4. Виберіть _PolyEvents з інтерфейсів списку, а потім натисніть кнопку ОК і проксі-клас для точки з'єднання буде створено, в даному випадку, CProxy_IPolyCtlEvents.

Якщо ви подивитеся на згенерований файл PolygonCP.h в FileView, ви бачите, що він має клас під назвою CProxy_PolyCtlEvents , походить від IConnectionPointImpl. PolygonCP.h також визначає два методи Fire_ClickIn та Fire_ClickOut , які беруть два параметри координат. Це методи, що ви називаєте, коли ви хочете, щоб вогонь подію від вашого контролю.

Майстер також додали CProxy_PolyEve&nts і IConnectionPointContainerImpl до елемента керування кількома успадкування list.nbsp; Майстер також піддається IConnectionPointContainer для вас, додаючи відповідні записи на карту COM.

Ви закінчите, що здійснення код для підтримки події. Тепер додати код, щоб вогонь подій у відповідний момент. Пам'ятайте, що ви збираєтеся стріляти в ClickIn або ClickOut подія, коли користувач натискає лівою кнопкою миші в елементі керування. Щоб дізнатися, коли користувач натискає кнопку, додати обробник для WM_LBUTTO&NDOWN повідомлення. У ClassViewклацніть правою кнопкою миші на CPolyCtl клас і виберіть Додати Windows повідомлення обробник... з контекстне menu.nbsp; Потім виберіть WM_LBUTTONDOWN у списку ліворуч і натисніть кнопку Додати обробника .  Натисніть кнопку ОК.

Далі введіть новий код функції OnLButtonDown в PolyCtl.h (видалення будь-який код, розміщені за допомогою майстра), щоб OnLButtonDown тепер виглядає наступним чином:

LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
   HRGN hRgn;
   СЛОВО xPos = LOWORD(lParam);  / / горизонтали позиції курсору
   СЛОВО yPos = HIWORD(lParam);  / / Вертикальна позиція курсору

CalcPoints(m_rcPos);

/ / Створення регіон з нашого списку пунктів
   hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, ОБМОТКА);

/ / Якщо використання точка в наших багатокутник потім Пожежа на ClickIn
   / / події в іншому випадку ми вогонь ClickOut подій
   Якщо (PtInRegion (hRgn, xPos, yPos))
      Fire_ClickIn (xPos, yPos);
   інше
      Fire_ClickOut (xPos, yPos);

/ / Видалити область, яку ми створили
   DeleteObject(hRgn);
   повертає 0;
}

Так як ви вже підрахували точок багатокутник у на OnDraw функції, використовувати їх у OnLButtonDown для створення в регіоні. Потім функція PtInRegion API для визначення, чи використання точка всередині багатокутник або не.

На uMsg параметр є Ідентифікатор повідомлення Windows, вирішуються. Це дозволяє вам мати одну функцію, яка обробляє низку повідомлень. На wParam і lParam є стандартні значення для повідомлень, якими займається. Параметр bHandled дозволяє вам вказати, чи функції обробки повідомлення чи ні. За промовчанням значення істина вказати, що функції обробки повідомлення, але ви можете встановити його ПОМИЛКОВИХ. Це призведе до ATL продовжувати шукати іншого повідомлення функцію обробник для надсилання повідомлення.

Тепер, спробувати свої заходи. Створення елемента керування і знову почати Тест контейнер елементів керування ActiveX . На цей раз, Перегляд журналу подій wi&ndow.nbsp; Маршрут події у вікно виводу, виберіть Вхід в меню параметрів і виберіть журналу, щоб вікно виводу. Тепер вставлення елемента керування і спробуйте натиснути у вікні. Зверніть увагу, що ClickIn спрацьовує, якщо клацнути в рамках Зафарбований багатокутник і ClickOut спрацьовує, коли ви клацніть за межами його.

Наступна буде додати сторінку властивостей.

Повернутися до Крок 4 |nbsp; До кроку 6

Index