MFC-ActiveX-Steuerelemente: Hinzufügen von vordefinierten Ereignissen zu einem ActiveX-Steuerelement

Vordefinierte Ereignisse unterscheiden sich von benutzerdefinierten Ereignissen darin, dass sie automatisch von der COleControl-Klasse ausgelöst werden. COleControl enthält vordefinierte Memberfunktionen, die Ereignisse auslösen, die aus gängigen Aktionen resultieren. Zu den Aktionen, die von COleControl implementiert werden, gehören Einzel- und Doppelklicks auf das Steuerelement, Tastaturereignisse und Änderungen am Status der Maustasten. Ereigniszuordnungseinträgen für vordefinierte Ereignisse wird immer das Präfix „EVENT_STOCK“ vorangestellt.

Vordefinierte Ereignisse, die vom Assistenten zum Hinzufügen von Ereignissen unterstützt werden

Die COleControl-Klasse bietet zehn vordefinierte Ereignisse, die in der folgenden Tabelle aufgeführt sind. Sie können die gewünschten Ereignisse in Ihrem Steuerelement mithilfe des Assistenten zum Hinzufügen von Ereignissen angeben.

Vordefinierte Ereignisse

Ereignis Auslösende Funktion Kommentare
Klicken void FireClick( ) Dieses Ereignis wird ausgelöst, wenn das Steuerelement die Mauseingabe erfasst, eine beliebige BUTTONUP-Meldung (links, Mitte oder rechts) empfangen wird und die Taste über dem Steuerelement losgelassen wird. Die vordefinierten Ereignisse „MouseDown“ und „MouseUp“ treten vor diesem Ereignis auf.

Ereigniszuordnungseintrag: EVENT_STOCK_CLICK( )
DblClick void FireDblClick( ) Dieses Ereignis ähnelt dem Ereignis „Click“, wird jedoch ausgelöst, wenn eine BUTTONDBLCLK-Meldung empfangen wird.

Ereigniszuordnungseintrag: EVENT_STOCK_DBLCLICK( )
Fehler void FireError( SCODESCODE, LPCSTRlpszDescription, UINTnHelpID= 0 ) Dieses Ereignis wird ausgelöst, wenn ein Fehler innerhalb Ihres ActiveX-Steuerelements außerhalb des Bereichs eines Methodenaufrufs oder Eigenschaftenzugriffs auftritt.

Ereigniszuordnungseintrag: EVENT_STOCK_ERROREVENT( )
KeyDown void FireKeyDown( shortnChar, shortnShiftState) Dieses Ereignis wird ausgelöst, wenn eine WM_SYSKEYDOWN- oder WM_KEYDOWN-Meldung empfangen wird.

Ereigniszuordnungseintrag: EVENT_STOCK_KEYDOWN( )
KeyPress void FireKeyPress( short*pnChar) Dieses Ereignis wird ausgelöst, wenn eine WM_CHAR-Meldung empfangen wird.

Ereigniszuordnungseintrag: EVENT_STOCK_KEYPRESS( )
KeyUp void FireKeyUp( shortnChar, shortnShiftState) Dieses Ereignis wird ausgelöst, wenn eine WM_SYSKEYUP- oder WM_KEYUP-Meldung empfangen wird.

Ereigniszuordnungseintrag: EVENT_STOCK_KEYUP( )
MouseDown void FireMouseDown( shortnButton, shortnShiftState, floatx, floaty) Dieses Ereignis wird ausgelöst, wenn BUTTONDOWN (links, Mitte oder rechts) empfangen wird. Die Mauseingabe wird unmittelbar vor dem Auslösen dieses Ereignisses erfasst.

Ereigniszuordnungseintrag: EVENT_STOCK_MOUSEDOWN( )
MouseMove void FireMouseMove( shortnButton, shortnShiftState, floatx, floaty) Dieses Ereignis wird ausgelöst, wenn eine WM_MOUSEMOVE-Meldung empfangen wird.

Ereigniszuordnungseintrag: EVENT_STOCK_MOUSEMOVE( )
MouseUp void FireMouseUp( shortnButton, shortnShiftState, floatx, floaty) Dieses Ereignis wird ausgelöst, wenn BUTTONUP (links, Mitte oder rechts) empfangen wird. Die Maustaste wird nicht mehr gedrückt, bevor dieses Ereignis ausgelöst wird.

Ereigniszuordnungseintrag: EVENT_STOCK_MOUSEUP( )
ReadyStateChange void FireReadyStateChange( ) Dieses Ereignis wird ausgelöst, wenn ein Steuerelement aufgrund der Menge der empfangenen Daten in den nächsten Bereitschaftsstatus übergeht.

Ereigniszuordnungseintrag: EVENT_STOCK_READYSTATECHANGE( )

Hinzufügen eines vordefinierten Ereignisses mithilfe des Assistenten zum Hinzufügen von Ereignissen

Das Hinzufügen vordefinierter Ereignisse erfordert weniger Arbeit als das Hinzufügen benutzerdefinierter Ereignisse, da das Auslösen des tatsächlichen Ereignisses automatisch von der Basisklasse COleControl verarbeitet wird. Mit dem folgenden Verfahren wird einem Steuerelement, das mithilfe des Assistenten für MFC-ActiveX-Steuerelemente entwickelt wurde, ein vordefiniertes Ereignis hinzugefügt. Das Ereignis namens KeyPress wird ausgelöst, wenn eine Taste gedrückt wird und das Steuerelement aktiv ist. Dieses Verfahren kann auch verwendet werden, um andere vordefinierte Ereignisse hinzuzufügen. Ersetzen Sie den Namen des ausgewählten vordefinierten Ereignisses durch „KeyPress“.

Hinzufügen des vordefinierten KeyPress-Ereignisses mithilfe des Assistenten zum Hinzufügen von Ereignissen

  1. Laden Sie das Steuerelementprojekt.

  2. Klicken Sie unter „Klassenansicht“ mit der rechten Maustaste auf Ihre ActiveX-Steuerelementklasse, um das Kontextmenü zu öffnen.

  3. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Ereignis hinzufügen.

    Dadurch wird der Assistent zum Hinzufügen von Ereignissen geöffnet.

  4. Wählen Sie in der Dropdownliste EreignisnameKeyPress aus.

  5. Klicken Sie auf Fertig stellen.

Änderungen des Assistenten zum Hinzufügen von Ereignissen für vordefinierte Ereignisse

Da vordefinierte Ereignisse von der Basisklasse des Steuerelements verarbeitet werden, ändert der Assistent zum Hinzufügen von Ereignissen ihre Klassendeklaration in keiner Weise. Er fügt das Ereignis zur Ereigniszuordnung des Steuerelements hinzu und macht einen Eintrag in der zugehörigen IDL-Datei. Die folgende Zeile wird der Ereigniszuordnung des Steuerelements hinzugefügt, die sich in der Implementierungsdatei (CPP-Datei) für die Steuerelementklasse befindet:

EVENT_STOCK_KEYPRESS()

Das Hinzufügen dieses Codes löst ein KeyPress-Ereignis aus, wenn eine „WM_CHAR“-Meldung empfangen wird und das Steuerelement aktiv ist. Das KeyPress-Ereignis kann zu anderen Zeiten ausgelöst werden, indem die auslösende Funktion (z. B. FireKeyPress) über den Steuerelementcode aufgerufen wird.

Der Assistent zum Hinzufügen von Ereignissen fügt der IDL-Datei des Steuerelements die folgende Codezeile hinzu:

[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);

Diese Zeile ordnet das KeyPress-Ereignis seiner Standarddispatch-ID zu und ermöglicht es dem Container, das KeyPress-Ereignis vorherzusagen.

Siehe auch

MFC ActiveX Controls (MFC-ActiveX-Steuerelemente)
MFC-ActiveX-Steuerelemente: Methoden
COleControl-Klasse