Dodawanie zdarzenia (ALT — Samouczek, część 5)
W tym kroku zostaną dodane ClickIn i ClickOut zdarzenia ATL formantu.Zostanie wywołane ClickIn zdarzenia, jeśli użytkownik kliknie Wielokąt oraz pożaru ClickOut , jeśli użytkownik kliknie poza.Zadania, aby dodać zdarzenie są następujące:
Dodawanie ClickIn i ClickOut metody
Generowanie biblioteki typów
Implementowanie interfejsów punktu połączenia
Dodanie metody ClickOut i ClickIn
Po utworzeniu formantu ATL w kroku 2 wybrano punktów połączenia pole wyboru.Spowodowało to _IPolyCtlEvents interfejsu w pliku Polygon.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 ten sposób programy, które umożliwiają przeglądanie obiektów COM można wybrać do wyświetlania interfejsu użytkownika.Należy również zauważyć, że wybranie punktów połączenia dodaje się następujący wiersz w pliku Polygon.idl, aby wskazać, że _IPolyCtlEvents jest domyślny interfejs źródłowy:
[default, source] dispinterface _IPolyCtlEvents;
Atrybut źródła wskazuje formant jest źródłem powiadomienia, więc ten interfejs będzie wywoływana w kontenerze.
Teraz Dodaj ClickIn i ClickOut metody _IPolyCtlEvents interfejsu.
Aby dodać metod ClickIn i ClickOut
W widoku klasy rozwiń wielokąta i PolygonLib, aby wyświetlić _IPolyCtlEvents.
Kliknij prawym przyciskiem myszy _IPolyCtlEvents.W menu skrótów kliknij polecenie Dodaj, a następnie kliknij przycisk Dodaj metodę.
Wybierz zwraca typ z void.
Wprowadź ClickIn w Nazwa metody pole.
W obszarze atrybuty parametr, zaznacz w pole.
Wybierz Typ parametru z LONG.
Typ x jako Nazwa parametrui kliknij przycisk Dodaj.
Powtórz kroki od 5 do 7, tym razem dla Nazwa parametru z y.
Kliknij Dalej.
Typ Metoda ClickIn jako ciąg helpstring.
Kliknij Zakończ.
Powtórz powyższe kroki, aby zdefiniować ClickOut metoda o tej samej LONG parametry x i y, to samo atrybuty parametr i tym samym void zwraca typ.
Sprawdź plik Polygon.idl, aby zobaczyć, że kod został dodany do _IPolyCtlEvents dispinterface.
_IPolyCtlEvents Dispinterface w pliku Polygon.idl powinna teraz wyglądać następująco:
dispinterface _IPolyCtlEvents
{
properties:
methods:
[id(1), helpstring("method ClickIn")] void ClickIn([in] LONG x, [in] LONG y);
[id(2), helpstring("method ClickOut")] void ClickOut([in] LONG x, [in] LONG y);
};
ClickIn i ClickOut podjęcie metod x i y współrzędne punktu klikniętego jako parametry.
Generowanie biblioteki typów
Ponieważ Kreator punkt połączenia użyje go uzyskać informacje potrzebne do utworzenia punktu połączenia i interfejsem kontenera punktu połączenia formantu w momencie wygenerować biblioteki typów.
Aby wygenerować biblioteki typów
Odbuduj projekt.
- lub -
Kliknij prawym przyciskiem myszy plik Polygon.idl w oknie Solution Explorer i kliknij przycisk skompilować w menu skrótów.
Spowoduje to utworzenie pliku Polygon.tlb, który jest typ biblioteki.Plik Polygon.tlb nie jest widoczne z Solution Explorer, ponieważ to jest plik binarny i nie można wyświetlić lub edytować bezpośrednio.
Implementowanie interfejsów punktu połączenia
Implementuje interfejs punktu połączenia i interfejs kontenera punktu połączenia 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 może 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 jest nazywany IConnectionPoint, i interfejsu, który implementuje kontenera punktu połączenia jest nazywany IConnectionPointContainer.
Aby wspomóc IConnectionPoint, użyj Kreatora wdrożenia punktu połączenia.Ten kreator generuje IConnectionPoint interfejsu przez odczytanie typu biblioteki i wykonywania funkcji dla każdego zdarzenia, które mogą być opalane.
Aby użyć Kreatora punktu połączenia wdrożenie
W widoku klasy, kliknij prawym przyciskiem myszy kontrolka wykonania CPolyCtl.
W menu skrótów kliknij polecenie Dodaj, a następnie kliknij przycisk Dodaj punkt połączenia.
Wybierz _IPolyCtlEvents z Źródło interfejsów listy i kliknij dwukrotnie, aby dodać go do wdrożenie punktów połączenia kolumny.Kliknij Zakończ.Klasa proxy dla punktu połączenia zostanie wygenerowany, w przypadku CProxy_IPolyCtlEvents.
Jeśli przyjrzymy się plik _IPolyCtlEvents_CP.h generowanych w Solution Explorer pojawi się ma klasy o nazwie CProxy_IPolyCtlEvents , pochodzi z IConnectionPointImpl._IPolyCtlEvents_CP.h definiuje również dwie metody Fire_ClickIn i Fire_ClickOut, które stają się dwa parametry współrzędnych.Wywołać te metody, gdy chcesz fire zdarzenia z formantu.
Kreator dodaje również CProxy_PolyEvents i IConnectionPointContainerImpl do programu kontroli wielu listy dziedziczenia.Kreator również narażone IConnectionPointContainer dla Ciebie, dodając odpowiednie wpisy mapy COM.
Zakończeniu wdrażania kodu do obsługi zdarzeń.Teraz Dodaj kod ognia zdarzenia w odpowiednim momencie.Należy pamiętać, że ma się ognia ClickIn lub ClickOut zdarzenie, kiedy użytkownik kliknie lewym przyciskiem myszy w formancie.Aby dowiedzieć się, gdy użytkownik kliknie przycisk, dodawanie obsługi dla WM_LBUTTONDOWN wiadomości.
Aby dodać obsługę wiadomości WM_LBUTTONDOWN
W widoku klasy, kliknij prawym przyciskiem myszy klasę CPolyCtl, a następnie kliknij przycisk Właściwości w menu skrótów.
W Właściwości okna, kliknij wiadomości ikonę, a następnie kliknij przycisk WM_LBUTTONDOWN z listy po lewej stronie.
Z wyświetlonej listy rozwijanej kliknij <Add> OnLButtonDown.OnLButtonDown Deklaracji programu obsługi zostaną dodane do PolyCtl.h i implementacji obsługi zostaną dodane do PolyCtl.cpp.
Następnie można zmodyfikować obsługi.
Aby zmodyfikować metodę OnLButtonDown
Zmienić kod, który składa się z OnLButtonDown PolyCtl.cpp (kod umieszczony przez Kreatora usuwania) metoda, dzięki czemu wygląda następująco:
LRESULT CPolyCtl::OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/) { HRGN hRgn; WORD xPos = LOWORD(lParam); // horizontal position of cursor WORD yPos = HIWORD(lParam); // vertical position of cursor CalcPoints(m_rcPos); // Create a region from our list of points hRgn = CreatePolygonRgn(&m_arrPoint[0], m_nSides, WINDING); // If the clicked point is in our polygon then fire the ClickIn // event otherwise we fire the ClickOut event if (PtInRegion(hRgn, xPos, yPos)) Fire_ClickIn(xPos, yPos); else Fire_ClickOut(xPos, yPos); // Delete the region that we created DeleteObject(hRgn); return 0; }
Ułatwia to kod wykorzystania punktów obliczona w OnDraw utworzyć region wykrywa myszy użytkownik kliknie z wywołania funkcji PtInRegion.
uMsg Jest identyfikator komunikatu systemu Windows są obsługiwane.Pozwala mieć jedną funkcję, która obsługuje szereg wiadomości.wParam i lParam standardowych wartości dla wiadomości obsługiwane są parametry.BHandled parametr umożliwia określenie, czy funkcja obsługi wiadomości lub nie.Domyślnie wartość jest równa TRUE do funkcji obsługi wiadomości, ale można go ustawić na FALSE.Spowoduje to ATL nadal szuka innej funkcji obsługi wiadomości wysłać wiadomość.
Tworzenie i testowanie formantu
Teraz należy wypróbować wydarzeń.Tworzenie formantu, a następnie uruchom ponownie kontenera ActiveX kontroli badań.W tym czasie wyświetlania okna Dziennik zdarzeń.Aby rozesłać zdarzeń w oknie dane wyjściowe, kliknij Rejestrowanie z Opcje menu, wybierz dziennika do okna wyjściowego.Wstawianie formantu i spróbuj kliknąć w oknie.Należy zauważyć, że ClickIn jest uruchamiany, jeśli klikniesz wypełniony wielokąt i ClickOut jest uruchamiany po kliknięciu spoza niej.
Następnie dodać stronę właściwości.