MFC-ActiveX-Steuerelemente: Hinzufügen von benutzerdefinierten Ereignissen
Benutzerdefinierte Ereignisse unterscheiden sich von vordefinierten Ereignissen darin, dass sie nicht automatisch durch Klasse COleControl ausgelöst werden.Ein benutzerdefiniertes Ereignis findet eine bestimmte Aktion, bestimmt durch den Entwickler von Steuerelementen, als das Ereignis.Die Ereigniszuordnungs Dateisystemeinträgen für benutzerdefinierte Ereignisse werden vom EVENT_CUSTOM Makro dargestellt.Der folgende Abschnitt implementiert ein benutzerdefiniertes Ereignis für ein ActiveX-Steuerelement-Projekt, das mit dem ActiveX-Steuerelement-Assistenten erstellt wurde.
Ein benutzerdefiniertes Ereignis mit dem Assistenten zum Hinzufügen von Ereignissen hinzu
Im folgenden Verfahren wird ein bestimmtes benutzerdefiniertes Ereignis, ClickIn hinzu.Sie können dieses Verfahren verwenden, um andere benutzerdefinierte Ereignisse hinzuzufügen.Ersetzen Sie den benutzerdefinierten Ereignisnamen und seine Parameter für den Namen ClickIn-Ereignis und den angegebenen Parametern.
So fügen Sie das benutzerdefinierte Ereignis ClickIn mithilfe des Assistenten zum Hinzufügen von Ereignissen hinzu
Laden Sie das Projekt des Steuerelements.
Klicken Sie in der Klassenansicht mit der rechten Maustaste auf die ActiveX-Steuerelementklasse, um das Kontextmenü zu öffnen.
Klicken Sie im Kontextmenü auf Hinzufügen und klicken Sie dann auf Ereignis hinzufügen.
Damit öffnet den Assistenten zum Hinzufügen von Ereignissen.
Wählen Sie im Feld Ereignisname zunächst alle vorhandenen Ereignis aus, und klicken Sie im Optionsfeld Benutzerdefiniert, dem Typ ClickIn.
Geben Sie im Feld Interner Name Geben Sie den Namen der Funktion zum Auslösen des Ereignisses ein.In diesem Beispiel verwenden Sie den Standardwert, der vom Assistenten zum Hinzufügen von Ereignissen (FireClickIn) bereitgestellt wird.
Fügen Sie einen Parameter hinzu, OLE_XPOS_PIXELS-Typ ( xCoord genannt), mit der Parametername und Parametertyp -Steuerelemente.
Fügen Sie einen zweiten Parameter hinzu, OLE_YPOS_PIXELS-Typ ( yCoord bezeichnet).
Klicken Sie auf Fertig stellen, um das Ereignis zu erstellen.
Assistent zum Hinzufügen von Ereignissenen-Änderungen für benutzerdefinierte Ereignisse
Wenn Sie ein benutzerdefiniertes Ereignis hinzufügen, geht der Assistent zum Hinzufügen von Ereignissen Änderungen an der Steuerelementklasse vor. H, .CPP- und .IDL-Dateien.Die folgenden Codebeispiele sind für den ClickIn-Ereignis bestimmt.
Die folgenden Zeilen werden an den Header hinzugefügt (. H) - Datei der Steuerelementklasse:
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
Dieser Code deklariert eine Inlinefunktion aufgerufen FireClickIn, die dem Ereignis COleControl::FireEvent und den Parametern ClickIn aufruft, die Sie mit dem Assistenten zum Hinzufügen von Ereignissen definiert haben.
Darüber hinaus wird die folgende Zeile in die Ereigniszuordnung für das Steuerelement hinzugefügt, in der Implementierungsdatei (.CPP der Steuerelementklasse):
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Dieser Code wird das Ereignis ClickIn auf die Inlinefunktion FireClickIn auf und übergibt die Parameter, die Sie mithilfe des Assistenten zum Hinzufügen von Ereignissen definiert haben.
Schließlich wird die folgende Zeile in die IDL-Datei des Steuerelements hinzugefügt:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Diese Zeile weist ein ClickIn-Ereignis dem die spezifische ID-Nummer auf, aus der Position des Ereignisses in der Assistent zum Hinzufügen von Ereignissenen-Ereignis aufgelistet.Die Liste Eintrag im Ereignisprotokoll kann ein Container das Ereignis vorauszusehen.Beispielsweise kann sie den auszuführenden Handler Code bereit, wenn das Ereignis ausgelöst wird.
FireClickIn aufrufen
Nachdem Sie das benutzerdefinierte Ereignis ClickIn mithilfe des Assistenten zum Hinzufügen von Ereignissen hinzugefügt haben, müssen Sie entscheiden, ob dieses Ereignis ausgelöst werden soll.Hierzu fügen Sie FireClickIn aufgerufen werden, wenn die entsprechende Aktion eintreten.In dieser Diskussion verwendet das Steuerelement die InCircle-Funktion innerhalb eines WM_LBUTTONDOWN Message-Handlers, um das ClickIn-Ereignis auszulösen, wenn ein Benutzer in einem kreisförmigen Bereichs elliptischen oder klickt.In den folgenden Verfahren wird WM_LBUTTONDOWN-Handler hinzu.
Um einen Meldungshandler mit dem Assistenten zum Hinzufügen von Ereignissen hinzu
Laden Sie das Projekt des Steuerelements.
In der Klassenansicht wählen Sie die ActiveX-Steuerelementklasse aus.
Klicken Sie im Eigenschaftenfenster auf die Schaltfläche Meldungen.
Das Eigenschaftenfenster zeigt eine Liste mit Meldungen an, die vom ActiveX-Steuerelement behandelt werden können.Jede Nachricht, die in Fettschrift angezeigt wird, bereits über eine Handlerfunktion, die an sie zugewiesen wird.
Wählen Sie im Eigenschaftenfenster die Meldung aus, die Sie bearbeiten möchten.Wählen Sie für dieses Beispiel WM_LBUTTONDOWN aus.
Klicken Sie im Dropdown-Listenfeld rechts ausgewähltes <Add> OnLButtonDown.
Doppelklicken Sie auf die neue Handlerfunktion in der Klassenansicht, um zum Meldungshandler Code in der Implementierungsdatei (.CPP) des ActiveX-Steuerelements zu wechseln.
Im folgenden Codebeispiel wird die InCircle-Funktion auf jedes Mal, wenn die linke Maustaste im Fenster innerhalb des Steuerelements geklickt wird.In diesem Beispiel kann in der WM_LBUTTONDOWN-Handlerfunktion, OnLButtonDown gefunden werden, in der Circ-Beispiel Fortsetzen.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
Hinweis |
---|
Wenn der Assistent zum Hinzufügen von Ereignissen Meldungshandler für Maustasten erstellt wird, wird ein Aufruf Aktionen auf denselben Meldungshandler der Basisklasse automatisch hinzugefügt.Nicht diesen Aufruf.Wenn das Steuerelement eine der vordefinierten Mausmeldungen verwendet, müssen die Meldungshandler in der Basisklasse aufgerufen werden, um sicherzustellen, dass die Erfassung von Mauseingaben ordnungsgemäß behandelt wird. |
Im folgenden Beispiel wird das Ereignis ausgelöst, wenn der Klick innerhalb eines zirkulären oder elliptischen Bereich des Steuerelements eintritt.Um dieses Verhalten zu erzielen, können Sie die InCircle-Funktion in der Implementierungsdatei des Steuerelements platzieren (.CPP):
VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
CRect rc;
GetClientRect(rc);
// Determine radii
double a = (rc.right - rc.left) / 2;
double b = (rc.bottom - rc.top) / 2;
// Determine x, y
double x = point.x - (rc.left + rc.right) / 2;
double y = point.y - (rc.top + rc.bottom) / 2;
// Apply ellipse formula
return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}
Außerdem müssen Sie die folgende Deklaration der Funktion InCircle dem Header des Steuerelements (hinzufügen. H) Datei:
VARIANT_BOOL InCircle(CPoint& point);
Benutzerdefinierte Ereignisse mit vordefinierten Namen
Sie können benutzerdefinierte Ereignisse mit demselben Namen wie vordefinierte Ereignisse erstellen, aber beide im gleichen Steuerelement nicht implementieren können.Beispielsweise können Sie ein benutzerdefiniertes Ereignis erstellen, das auf aufgerufen wird, der nicht als vordefinierte Ereignis auslöst, auf normalerweise auslösen würde.Sie können dann das Klickereignis zu einem beliebigen Zeitpunkt auslösen, indem Sie seine Auslösung Funktion aufgerufen haben.
Im folgenden Verfahren wird ein benutzerdefiniertes Click-Ereignis hinzu.
So erstellen Sie ein benutzerdefiniertes Ereignis hinzufügen, das einen vordefinierten Ereignisnamen verwendet
Laden Sie das Projekt des Steuerelements.
Klicken Sie in der Klassenansicht mit der rechten Maustaste auf die ActiveX-Steuerelementklasse, um das Kontextmenü zu öffnen.
Klicken Sie im Kontextmenü auf Hinzufügen und klicken Sie dann auf Ereignis hinzufügen.
Damit öffnet den Assistenten zum Hinzufügen von Ereignissen.
Wählen Sie in der Dropdownliste Ereignisname Wählen Sie einen vordefinierten Ereignisnamen aus.Wählen Sie für dieses Beispiel Klicken.
Für Ereignistyp ausgewähltes Benutzerdefiniert.
Klicken Sie auf Fertig stellen, um das Ereignis zu erstellen.
FireClick Aufruf an den entsprechenden Stellen im Code.