Teraz należy dodać ClickIn i ClickOut zdarzenia dla formantu ATL. Zostanie wywołane ClickIn zdarzenia, jeśli użytkownik kliknie wewnątrz wielokąta i ogień ClickOut Jeśli użytkownik kliknie poza.
Gdy pełna kontrola został utworzony w kroku 2, wybrano box.nbsp wyboru Punkty połączeń wsparcia ; Spowodowało to IPolyCtlEvents interfejsu w pliku .idl. &Należy zauważyć, że nazwa interfejsu zaczyna się od znaku podkreślenia. Jest to Konwencja, aby wskazać, że interfejs jest interfejsem wewnętrznym. W związku z tym programy, które umożliwiają przeglądanie obiektów COM może zrezygnować z wyświetlania interfejsu użytkownika. Również ogłoszenia w pliku .idl Wsparcie Connection Points dodaje linię do wskazania, że IPolyCtlEvents jest interfejs źródłowy domyślne. Atrybut źródła wskazuje, że formant jest źródłem powiadomienia, tak będzie wywoływać ten interfejs na pojemniku.
Teraz należy dodać metod ClickIn i ClickOut IPolyCtlEvents interfejsu:
IPolyCtlEvents w ClassView i zaznaczanie Dodać Method… z menu kontekstowego.void.ClickIn w polu Nazwa metody.[in] long x, [in] long y w polu Parametry.
Sprawdź plik .idl, aby zobaczyć, że kod został doda&ny jako metodę IPolyCtlEvents dispinterface.nbsp; Sama procedura służy do definiowania ClickOut metody z samymi parametrami i typ zwracany. Dispinterface IPolyCtlEvents w pliku .idl powinno wyglądać tak jak to:
dispinterface _IPolyCtlEvents
{
właściwości:
metody:
[id(1), ciąg helpstring ("metoda ClickIn")] unieważnić ClickIn ([w] długo x, y długich [w]);
[id(2), ciąg helpstring ("metoda ClickOut")] unieważnić ClickOut ([w] długo x, y długich [w]);
}
ClickIni ClickOut metody, które uwzględniają x i y współrzędne punktu klikniętego jako parametry.
Teraz generować biblioteki typów. Aby to zrobić, można albo ponownie skompiluj projekt lub kliknij prawym przyciskiem myszy plik .idl w FileView i kliknij przycisk Kompiluj Polygon.idl. Spowoduje to utworzenie pliku Polygon.tlb, który jest biblioteki typów.
Następnie implementuje interfejs punktu połączenia i interfejs kontenera punktu połączenia dla formantu. (W modelu COM, zdarzenia są realizowane za pośrednictwem mechanizmu punktów połączenia. Aby odbierać zdarzenia z obiektu COM, kontener ustanawia połączenie Doradczy do punktu połączenia, który implementuje obiektu COM. Ponieważ obiekt COM mogą mieć wiele punktów połączenia, obiekt COM również implementuje interfejs kontenera punktu połączenia. Za pomocą tego interfejsu kontenera można określić które punkty połączenia są obsługiwane.) Interfejs, który implementuje punktu połączenia nazywa się IConnectionPoint i interfejs, który implementuje kontenera punktu połączenia jest nazywany IConnectionPointContainer.
Aby ułatwić wdrożenie IConnectionPoint, użyj ClassView Aby uzyskać dostęp do Kreatora punktu połączenia. Ten kreator tworzy interfejs IConnectionPoint czytania biblioteki typów i wykonywania funkcji dla każdego zdarzenia, które mogą być opalane.
Aby uruchomić kreatora, wykonaj następujące kroki:

Jeśli spojrzysz w wygenerowanym pliku PolygonCP.h w FileView, zobaczysz posiada klasę o nazwie CProxy_PolyCtlEvents , pochodzi z IConnectionPointImpl. PolygonCP.h definiuje również dwie metody Fire_ClickIn i Fire_ClickOut , które podjąć dwa parametry współrzędnych. Są to metody, które zostanie wywołana, gdy chcesz ognia zdarzenia z formantu.
Kreator rów&nież dodawane CProxy_PolyEvents i IConnectionPointContainerImpl do Twojego kontroli wielu dziedziczenie list.nbsp; Kreator również narażone IConnectionPointContainer dla Ciebie na dodając odpowiednie zapisy do mapy COM.
Zakończeniu wdrażania kodu do obsługi zdarzeń. Teraz Dodaj trochę kodu na ogień zdarzenia w odpowiednim momencie. &Należy pamiętać, że zamierzasz ogień ClickIn lub ClickOut zdarzenie, kiedy użytkownik kliknie przycisk lewy w formancie. Aby dowiedzieć się, gdy użytkownik kliknie przycisk, należy najpierw dodać obsługę wiadomości WM_LBUTTONDOWN . W ClassViewkliknij prawym przyciskiem myszy klasę CPolyCtl i wybierz Dodaj Windows Message Handler... menu.nbsp skrótów; Następnie z listy po lewej stronie wybierz pozycję WM_LBUTTONDOWN i kliknij przycisk Dodaj program obsługi . Kliknij przycisk OK.
Następnie Dodaj nowy kod funkcji OnLButtonDown w PolyCtl.h (usuwanie kodu wprowadzane przez kreatora) tak, aby OnLButtonDown wygląda teraz, to:
LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
HRGN hRgn;
Program WORD xPos = LOWORD(lParam); / / pozioma pozycja kursora
Program WORD yPos = HIWORD(lParam); / / pionowe położenie kursora
CalcPoints(m_rcPos);
/ / Create regionu z naszej listy punktów
hRgn = CreatePolygonRgn (& m_arrPoint [0], m_nSides, rozwiązania);
/ / Jeżeli punktem klikniętym jest w naszym wielokąt następnie fire ClickIn
/ / Zdarzenie inaczej ogień przez nas zdarzenia ClickOut
Jeżeli (PtInRegion (hRgn, xPos, yPos))
Fire_ClickIn (xPos, yPos);
Else
Fire_ClickOut (xPos, yPos);
/ / Delete regionu, że utworzyliśmy
DeleteObject(hRgn);
zwrócona wartość 0;
}
Ponieważ już zostały obliczone punkty wielokąt w OnDraw funkcji, korzystanie z nich OnLButtonDown Aby utworzyć region. Następnie należy użyć funkcji PtInRegion API czy punktem klikniętym jest wewnątrz wielokąt lub nie.
uMsgParametr jest identyfikator wiadomości systemu Windows są obsługiwane. Dzięki temu można mieć jedną funkcję, która obsługuje szereg wiadomości. wParami lParam są standardowych wartości dla wiadomości jest obsługiwane. Parametr bHandled pozwala na określenie, czy funkcja obsługi wiadomości, czy nie. Domyślnie wartość jest ustawiona na TRUE oznacza, że funkcja obsługi wiadomości, ale można go ustawić na FAŁSZYWE. Zresetowanie spowoduje ATL nadal szuka innej funkcji obsługi wiadomości, do którego należy wysłać wiadomość.
Teraz wypróbować wydarzenia. Tworzenie formantu i ponownie uruchomić ActiveX Control badania kontenera . W tym czasie wyświetlić window.nbsp dziennika zdarzeń; Do routowania zdarzeń, aby oknie Wyjście, z menu Opcje wybierz rejestrowania i wybrać dziennik, aby oknie output. Teraz wstawić formant i spróbuj, klikając w oknie. &Należy zauważyć, że ClickIn jest zwolniony po kliknięciu wewnątrz wypełniony wielokąt i ClickOut jest zwolniony po kliknięciu przycisku spoza tego.
Następnie należy dodać strony właściwości.
Wróć do kroku 4 |nbsp; Do kroku 6