Nun fügen Sie hinzu, werden ein ClickIn und ein ClickOut -Ereignis, um den ATL-Steuerelement. Sie werden ausgelöst, das ClickIn -Ereignis klickt der Benutzer innerhalb des Polygons und Feuer ClickOut klickt der Benutzer außerhalb.
We&nn Sie die volle Kontrolle in Schritt 2 erstellt haben, aktiviert Sie die Support-Verbindungspunkte Kontrollkästchen box.nbsp; Dies erstellt die IPolyCtlEvents -Schnittstelle in der IDL-Datei. Beachten Sie, dass die Schnittstellenname mit einem Unterstrich beginnt. Dies ist eine Konvention, um anzugeben, dass die Schnittstelle eine interne Schnittstelle ist. So können Programme, mit denen Sie COM-Objekte durchsuchen wählen, nicht um die Schnittstelle für den Benutzer anzuzeigen. Auch Hinweis in der IDL-Datei, dass Support Verbindung Punkte eine Linie um anzugeben, dass hinzugefügt IPolyCtlEvents ist die Standard-Quellschnittstelle. Das Source-Attribut gibt an, dass das Steuerelement ist die Quelle für die Benachrichtigungen, damit es diese Schnittstelle für den Container aufgerufen wird.
Jetzt sollten Sie die Methoden ClickIn und ClickOut zum Hinzufügen der IPolyCtlEvents Schnittstelle:
IPolyCtlEvents im Klassenansicht und wählen Sie Methode hinzufügen... aus dem Popupmenü.void.ClickIn im Feld Methodenname.[in] long x, [in] long y im Feld Parameter.
Überprüfe&n Sie die IDL-Datei zu sehen, dass der Code, als eine Methode, um hinzugefügt wurde die IPolyCtlEvents dispinterface.nbsp; Verwenden Sie dann das gleiche Verfahren zum Definieren einer ClickOut Methode mit dem gleichen Parameter und Rückgabetyp. Die IPolyCtlEvents-Disp-Schnittstelle in der IDL-Datei sollte nun wie folgt aussehen.:
dispinterface _IPolyCtlEvents
{
Eigenschaften:
Methoden:
[13-10, Helpstring ("Methode ClickIn")] void ClickIn ([in] Long X, [in] long y);
[id(2), Helpstring ("Methode ClickOut")] void ClickOut ([in] Long X, [in] long y);
}
Die ClickIn und ClickOut Methoden, die die x- und y-Koordinaten des angeklickten Punkt als Parameter.
Jetzt erzeugen Sie Ihre Typ-Bibliothek. Dazu können Sie entweder Ihr Projekt neu erstellen oder mit der rechten Maustaste der IDL-Datei in die Datei und klicken Sie auf Kompilieren Polygon.idl. Dies wird die Datei Polygon.tlb erstellt, die Ihre Typbibliothek ist.
Als Nächstes implementieren Sie einen Verbindungspunkt-Schnittstelle und eine Verbindungspunkt-Containerschnittstelle für das Steuerelement. (In COM werden Ereignisse durch den Mechanismus der Verbindungspunkte implementiert. Um Ereignisse aus einem COM-Objekt zu erhalten, legt ein Container eine Advise-Verbindung an den Verbindungspunkt, den das COM-Objekt implementiert. Da ein COM-Objekt mehrere Verbindungspunkte haben kann, implementiert das COM-Objekt auch eine Verbindungspunkt-Containerschnittstelle. Über diese Schnittstelle kann der Container bestimmen, welche Verbindungspunkte unterstützt werden.) Die Schnittstelle, die implementiert einen Verbindungspunkt nennt man IConnectionPoint und die Schnittstelle, die implementiert eine Verbindungspunktcontainer heißt IConnectionPointContainer.
Zur Vermeidung von Implementieren von IConnectionPointverwenden Sie Klassenansicht auf einen Verbindungspunkt-Assistenten zugreifen. Dieser Assistent erstellt die IConnectionPoint -Schnittstelle durch die Typ-Bibliothek lesen und implementieren eine Funktion für jedes Ereignis, das ausgelöst werden kann.
Gehen folgendermaßen Sie vor um den Assistenten auszuführen,:

Wenn Sie die generierte Datei PolygonCP.h in der Dateiansehen, Sie sehen, es hat eine Klasse namens CProxy_PolyCtlEvents , die von IConnectionPointImplabgeleitet. PolygonCP.h definiert außerdem die beiden Methoden Fire_ClickIn und Fire_ClickOut , die nehmen die beiden Koordinaten Parameter. Dies sind die Methoden, die Sie aufrufen, wenn ein Ereignis vom Steuerelement ausgelöst werden soll.
Der Assiste&nten hinzugefügt auch die CProxy_PolyEvents und IConnectionPointContainerImpl des Steuerelements mehrere Vererbung list.nbsp; Der Assistent gemachten auch IConnectionPointContainer für Sie entsprechende Einträge hinzufügen der COM-Zuordnung.
Sie sind fertig implementieren den Code zur Unterstützung von Veranstaltungen. &Nun, Hinzufügen von Code zum geeigneten Zeitpunkt die Ereignisse ausgelöst. Denken Sie daran, Sie wollen Feuer eine ClickIn oder ClickOut -Ereignis, wenn der Benutzer die linke Maustaste im Steuerelement klickt. Um herauszufinden, wenn der Benutzer auf die Schaltfläche klickt, müssen Sie zunächst fügen Sie einen Handler für die WM_LBUTTONDOWN -Meldung hinzu. In ClassViewRechtsklick auf die CPolyCtl-Klasse, und wählen Sie Windows Message Handler hinzufügen... aus dem Kontextmenü menu.nbsp; Dann wählen Sie WM_LBUTTONDOWN aus der Liste auf der linken Seite und klicken Sie auf die Schaltfläche Handler hinzufügen . Klicken Sie auf OK.
Als Nächstes fügen Sie neuen Code der Funktion OnLButtonDown in PolyCtl.h (platziert, indem der Assistent Code löschen) so dass OnLButtonDown nun wie folgt aussieht:
LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
HRGN hRgn;
WORD xPos = LOWORD(lParam); / / horizontale Position des Cursors
WORD yPos = HIWORD(lParam); / / vertikale Position des Cursors
CalcPoints(m_rcPos);
/ / Erstellen einer Region aus der Liste der Punkte
hRgn = CreatePolygonRgn (& M_arrPoint [0], M_nSides, Winden);
/ / Wenn der angeklickte Punkt in unserer Polygon dann Feuer das ClickIn
/ / Veranstaltung sonst wir Feuer das ClickOut-Ereignis
Wenn (PtInRegion (hRgn, xPos, yPos))
Fire_ClickIn (xPos, yPos);
anderes
Fire_ClickOut (xPos, yPos);
/ / Löschen die Region, die wir erstellt
DeleteObject(hRgn);
return 0;
}
Da Sie schon, die Punkte des Polygons in berechnet haben der OnDraw Funktion, verwenden Sie sie in OnLButtonDown um eine Region zu erstellen. Dann verwenden Sie die PtInRegion API-Funktion, um festzustellen, ob der angeklickte Punkt innerhalb des Polygons oder nicht ist.
Die uMsg Parameter ist die ID der Windows-Nachricht behandelt wird. Dadurch können Sie eine Funktion haben, die eine Reihe von Nachrichten behandelt. Die wParam und die lParam sind die Standardwerte für die Nachricht behandelt wird. Der Parameter bHandled können Sie angeben, ob die Funktion die Meldung oder nicht behandelt. Standardmäßig ist der Wert auf TRUE festgelegt, um anzugeben, dass die Funktion die Nachricht behandelt, aber Sie können verlegen es zu falsche. Dabei bewirkt ATL weiterhin auf der Suche nach einer anderen Meldungshandlerfunktion, an die die Nachricht gesendet.
Probieren Sie jetzt Ihre Veranstaltungen. Erstellen Sie das Steuerelement und starten Sie ActiveX Control Test Container erneut. Zeigen Sie diesmal die Ereignisprotokoll-window.nbsp; Um Ereignisse für das Ausgabefenster weiterzuleiten, wählen Sie Protokollierung im Menü Optionen und wählen Sie Protokoll zum Ausgabefenster. &Nun fügen Sie das Steuerelement, und klicken Sie im Fenster. Beachten Sie, dass ClickIn wird ausgelöst, wenn Sie innerhalb des ausgefüllten Polygons klicken und ClickOut wird ausgelöst, wenn Sie außerhalb klicken.
Als Nächstes fügen Sie eine Eigenschaftenseite.