MFC-ActiveX-Steuerelemente: Weiterführende Themen

Dieser Artikel enthält die erweiterten Themen, die zur Entwicklung von ActiveX-Steuerelementen verknüpft werden. Dazu gehören:

  • Verwenden von Datenbankklassen in ActiveX-Steuerelemente

  • Implementieren einer parametrisierten Eigenschaft

  • Fehlerbehandlung im ActiveX-Steuerelement

  • Behandeln von Special-Tasten im Steuerelement

  • Klicken Sie Dialogfeld-Kontrollen zugreifen, die zur Laufzeit nicht sichtbar sind

Verwenden von Datenbankklassen in ActiveX-Steuerelemente

Da die ActiveX-Steuerelement-Klassen Teil der Klassenbibliothek sind, können Sie die gleichen Verfahren und Regeln für die Verwendung der Datenbankklassen in einer Standard-MFC-Anwendung auf die Entwicklung der ActiveX-Steuerelemente verwenden, die die MFC-Datenbankklassen verwenden.

Eine allgemeine Übersicht der MFC-Datenbankklassen, finden Sie unter MFC-Datenbankklassen (DAO und ODBC). Der Artikel stellt die MFC-ODBC- und MFC-DAO-Klassen vor und verweist Sie auf Details zu jedem.

Hinweis

Ab Visual C++ .NET wird DAO von der Visual C++-Umgebung und den Assistenten nicht mehr unterstützt. (Die DAO-Klassen sind allerdings weiterhin enthalten und können verwendet werden.)Microsoft empfiehlt, dass Sie OLE DB-Vorlagen oder ODBC und MFC für neue Projekte verwenden.DAO sollte lediglich zur Verwaltung bereits bestehender Anwendungen eingesetzt werden.

Implementieren einer parametrisierten Eigenschaft

Eine parametrisierte Eigenschaft (gelegentlich aufgerufen ein Eigenschaftenarray) ist eine Methode für das Verfügbarmachen einer homogenen Auflistung Werte als einzelne Eigenschaft des Steuerelements. Beispielsweise können Sie eine parametrisierte Eigenschaft verwenden, um ein Array oder ein Wörterbuch als Eigenschaft verfügbar machen. In Visual Basic wird auf eine solche Eigenschaft mithilfe der Arraynotation zugegriffen:

x = o.Array(2, 3) ' gets element of 2D array
o.Array(2, 3) = 7 ' sets element of 2D array

Verwenden Sie den Assistenten zum Hinzufügen von Eigenschaften, um eine parametrisierte Eigenschaft zu implementieren. Der Assistent zum Hinzufügen von Eigenschaften implementiert die Eigenschaft, indem ein Paar Get/Set-Funktionen hinzufügen, die dem Steuerelementbenutzer ermöglichen, auf die Eigenschaft mithilfe der oben erwähnten Notation oder in der Standardweise zuzugreifen.

Ähnlich den Methoden und Eigenschaften, über parametrisierte Eigenschaften auch eine Begrenzung für die Anzahl der zulässigen Parameter. Im Fall von parametrisierten Eigenschaften ist die Grenze 15 Parameter (wenn ein Parameter zum Speichern des Eigenschaftswerts, reserviert ist).

Im folgenden Verfahren wird eine parametrisierte Eigenschaft hinzu, aufgerufen Array, auf das als zweidimensionales Array von Ganzzahlen zugegriffen werden kann.

So fügen Sie eine parametrisierte Eigenschaft mithilfe des Assistenten zum Hinzufügen von Eigenschaften hinzufügen

  1. Laden Sie das Projekt des Steuerelements.

  2. Erweitern Sie in der Klassenansicht den Bibliotheksknoten des Steuerelements.

  3. Klicken Sie auf den Schnittstellenknoten für das Steuerelement (der zweite Knoten des Bibliotheksknotens) mit der rechten Maustaste um das Kontextmenü zu öffnen.

  4. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.

  5. Im Feld Eigenschaftenname geben Sie Array ein.

  6. Im Feld Eigenschaftentyp die Option short aus.

  7. Für Implementierung-Typ auf Get/Set-Methoden.

  8. In den Feldern Get-Funktion und Set-Funktion geben Sie eindeutigen Namen für das abrufen und festlegen Funktionen oder übernehmen die Standardnamen ein.

  9. Fügen Sie einen Parameter hinzu, die row-Typ ( short), mit Parametername und Parametertyp -Steuerelemente.

  10. Fügen Sie einen zweiten Parameter hinzu, der column-Typ ( short) aufgerufen wird.

  11. Klicken Sie auf Fertig stellen.

Änderungen vom Assistenten zum Hinzufügen von Eigenschaften

Wenn Sie eine benutzerdefinierte Eigenschaft hinzugefügt, wird der Assistent zum Hinzufügen von Eigenschaften Änderungen an der Steuerelementklassenkopfzeile vor (.H) und Dateien die Implementierungsdatei (.CPP).

Die folgenden Zeilen werden der Steuerelementklasse hinzugefügt. Außerdem:

SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);

Dieser Code deklariert zwei Funktionen aufgerufen GetArray und SetArray, die dem Benutzer ermöglichen, eine bestimmte Zeile und eine Spalte zu anfordern, wenn sie auf die Eigenschaft zugreifen.

Darüber hinaus fügt der Assistent zum Hinzufügen von Eigenschaften die folgenden Zeilen der Steuerdispatchzuordnung hinzu, in der Steuerelementklasse (.CPP):

DISP_PROPERTY_PARAM_ID(CMyAxUICtrl, "Array", dispidArray, GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)

Schließlich werden Implementierungen die GetArray und SetArray Features zum Ende der CPP-Datei hinzugefügt. In den meisten Fällen ändern Sie die Abrufensfunktion, um den Wert der Eigenschaft zurückgegeben. Die festgelegte Funktion enthält normalerweise Code, der ausgeführt werden soll, einen, vor oder nach der Eigenschaft ändert.

Damit diese Eigenschaft ist hilfreich, können Sie eine Membervariable des zweidimensionalen Arrays in der Steuerelementklasse, des Typs short, den mittels für die parametrisierte Eigenschaft deklarieren. Sie können die Abrufensfunktion dann ändern, um den Wert zurückzugeben, der an der richtigen Zeile und in der Spalte gespeichert wurde, wie durch die Parameter angegeben und die festgelegte Funktion, um den Wert zu aktualisieren, der durch die Zeilen- und Spaltenparameter verwiesen wurde.

Fehlerbehandlung im ActiveX-Steuerelement

Wenn Fehlerzustände im Steuerelement auftreten, müssen Sie möglicherweise den Fehler den Steuerelementcontainer melden. Es gibt zwei Methoden für das Melden von Fehlern, abhängig von der Situation, in der der Fehler auftritt. Wenn der Fehler in einer Eigenschaft auftritt, get oder set Funktion fest, oder in der Implementierung einer OLE-Automatisierungs-Methode, sollte das Steuerelement die COleControl::ThrowError aufrufen, das z Steuerelementbenutzer signalisiert, dass ein Fehler aufgetreten ist. Wenn der Fehler zu jeder anderen Zeitpunkt auftritt, sollte das Steuerelement die COleControl::FireError aufrufen, ein vordefiniertes Fehlerereignis auslöst.

Um der Fehlertyp anzugeben die aufgetreten ist, muss das Steuerelement einen Fehlercode an ThrowError oder FireError übergeben. Ein Fehlercode ist ein OLE-Statuscode, der einen 32-Bit-Wert hat. Wenn möglich, wählen Sie einen Fehlercode aus Standardsatz mit Codes aus, die in der OLECTL.H-Headerdatei definiert werden. In der folgenden Tabelle werden diese Code zusammen.

ActiveX-Steuerelement-Fehlercodes

Fehler

Beschreibung

CTL_E_ILLEGALFUNCTIONCALL

Ungültiger Funktionsaufruf

CTL_E_OVERFLOW

Overflow

CTL_E_OUTOFMEMORY

Nicht genügend Arbeitsspeicher

CTL_E_DIVISIONBYZERO

Division durch Null

CTL_E_OUTOFSTRINGSPACE

Aus Zeichenfolgenleerzeichen Auschecken

CTL_E_OUTOFSTACKSPACE

Aus Stapelspeicher Auschecken

CTL_E_BADFILENAMEORNUMBER

Ungültiger Dateiname oder Zahl

CTL_E_FILENOTFOUND

Die Datei wurde nicht gefunden.

CTL_E_BADFILEMODE

Ungültiger Modus Alle Dateien

CTL_E_FILEALREADYOPEN

Datei bereits geöffnet

CTL_E_DEVICEIOERROR

Geräten-E/A-Fehler

CTL_E_FILEALREADYEXISTS

Datei ist bereits vorhanden

CTL_E_BADRECORDLENGTH

Länge des schlechten Aufruf

CTL_E_DISKFULL

Datenträger ist voll

CTL_E_BADRECORDNUMBER

Nummer des schlechten Aufruf

CTL_E_BADFILENAME

Ungültiger Dateiname

CTL_E_TOOMANYFILES

Zu viele Dateien

CTL_E_DEVICEUNAVAILABLE

Gerät nicht verfügbar

CTL_E_PERMISSIONDENIED

Berechtigung verweigert

CTL_E_DISKNOTREADY

Datenträger nicht bereit

CTL_E_PATHFILEACCESSERROR

Pfad/Dateizugriffsfehler

CTL_E_PATHNOTFOUND

Pfad nicht gefunden

CTL_E_INVALIDPATTERNSTRING

Ungültige Musterzeichenfolge

CTL_E_INVALIDUSEOFNULL

Ungültiger Verwendung von NULL

CTL_E_INVALIDFILEFORMAT

Ungültiges Dateiformat

CTL_E_INVALIDPROPERTYVALUE

Ungültiger Eigenschaftswert

CTL_E_INVALIDPROPERTYARRAYINDEX

Ungültiger Eigenschaftenarrayindex

CTL_E_SETNOTSUPPORTEDATRUNTIME

Satz nicht zur Laufzeit unterstützt

CTL_E_SETNOTSUPPORTED

Satz nicht unterstützt (schreibgeschützte Eigenschaft)

CTL_E_NEEDPROPERTYARRAYINDEX

Anforderungseigenschaften-Arrayindex

CTL_E_SETNOTPERMITTED

Satz nicht zulässig

CTL_E_GETNOTSUPPORTEDATRUNTIME

Rufen Sie nicht unterstütztes zur Laufzeit ab

CTL_E_GETNOTSUPPORTED

Rufen Sie nicht unterstütztes ab (lesegeschützte Eigenschaft)

CTL_E_PROPERTYNOTFOUND

Eigenschaft nicht gefunden

CTL_E_INVALIDCLIPBOARDFORMAT

Ungültiges Zwischenablageformat

CTL_E_INVALIDPICTURE

Ungültiges Bild

CTL_E_PRINTERERROR

Druckerfehler

CTL_E_CANTSAVEFILETOTEMP

Kann Datei zu speichern TEMP

CTL_E_SEARCHTEXTNOTFOUND

Suchen Sie den gesuchten Text

CTL_E_REPLACEMENTSTOOLONG

jeweiligen Ersatz zu lang

Falls nötig verwenden Sie das Makro CUSTOM_CTL_SCODE, um einen benutzerdefinierten Fehlercode für eine Bedingung zu definieren, die nicht durch einen der Standardcodes abgedeckt wird. Der Parameter für dieses Makros sollte eine ganze Zahl zwischen 1000 und 32767 sein, liegen. Beispiel:

#define MYCTL_E_SPECIALERROR CUSTOM_CTL_SCODE(1000)

Wenn Sie ein ActiveX-Steuerelement erstellen, um ein vorhandenes VBX-Steuerelement zu ersetzen, definieren Sie die ActiveX-Steuerelement-Fehlercodes mit den gleichen numerischen Werte, die das VBX-Steuerelement verwendet, um sicherzustellen, dass die Fehlercodes kompatibel sind.

Behandeln von Special-Tasten im Steuerelement

In einigen Fällen möchten Sie möglicherweise bestimmte Tastenkombinationen auf eine besondere Weise behandeln; beispielsweise fügen Sie eine neue Zeile ein, wenn der EINGABETASTE einem mehrzeiligen Textfeld-Steuerelement oder eine Verschiebung zwischen einer Gruppe Bearbeitungssteuerelementen gedrückt wird, als eine gerichtetes Schlüssel-ID geklickt hat.

Wenn die Basisklasse des ActiveX-Steuerelements COleControl handelt, kann CWnd::PreTranslateMessage überschreiben, um Meldungen verarbeiten, bevor der Container sie verarbeitet. Bei diesem Verfahren wird immer TRUE zurückgegeben, wenn Sie die Meldung in der Überschreibung der PreTranslateMessage bearbeiten.

Das folgende Codebeispiel zeigt eine beliebige Weise der Behandlung aller Nachrichten, die den direktionalen Schlüssel verknüpft werden.

BOOL CMyAxUICtrl::PreTranslateMessage(MSG* pMsg)
{
   BOOL bHandleNow = FALSE;

   switch (pMsg->message)
   {
      case WM_KEYDOWN:
         switch (pMsg->wParam)
         {
         case VK_UP:
         case VK_DOWN:
         case VK_LEFT:
         case VK_RIGHT:
            bHandleNow = TRUE;
            break;
         }
         if (bHandleNow)
         {
            OnKeyDown((UINT)pMsg->wParam, LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
         }
         break;
   }
   return bHandleNow;
}

Weitere Informationen über Behandlungstastaturschnittstellen für ein ActiveX-Steuerelement, finden Sie die ActiveX-SDK-Dokumentation.

Klicken Sie Dialogfeld-Kontrollen zugreifen, die zur Laufzeit nicht sichtbar sind

Sie können Dialogfeldkontrollen erstellen, die keine Benutzeroberfläche aufweisen und zur Laufzeit nicht sichtbar sind. Wenn Sie eine während der Laufzeit unsichtbar ActiveX-Steuerelement einem Dialogfeld hinzufügen und CWnd::GetDlgItem verwenden, um auf das Steuerelement zugreifen, funktioniert das Steuerelement nicht richtig. Stattdessen sollten Sie eine der folgenden Techniken verwenden, um ein Objekt abzurufen, das das Steuerelement darstellt:

  • Mit dem Assistenten zum Hinzufügen von Membervariablen Option Steuerelementvariable und die ID des Steuerelements aus Geben Sie einen Membervariablennamen ein und wählen Sie die Wrapperklasse des Steuerelements als Steuerelementtyp.

    - oder -

  • Deklarieren Sie eine lokale und ordnen Sie als das Dialogfeldelement unter. Fügen Sie Code ein, der dem folgenden ähnelt (CMyCtrl ist die Wrapperklasse, IDC_MYCTRL1 ist die ID des Steuerelements):

    CCirc myCirc;
    myCirc.SubclassDlgItem(IDC_CIRCCTRL2, this);
    // ... use myCirc ...
    myCirc.UnsubclassWindow();
    

Siehe auch

Konzepte

MFC-ActiveX-Steuerelemente