Freigeben über


MFC-ActiveX-Steuerelemente: Weiterführende Themen

Dieser Artikel enthält die erweiterten Themen, die für das Entwickeln von ActiveX-Steuerelementen verknüpft sind.Dazu gehören:

  • Verwenden von Datenbankklassen mit ActiveX-Steuerelementen

  • Eine parametrisierte Eigenschaft implementieren

  • Behandeln von Fehlern im ActiveX-Steuerelement

  • Besondere Schlüssel im Steuerelement behandeln

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

Verwenden von Datenbankklassen mit ActiveX-Steuerelementen

Da die ActiveX-Steuerelement-Klassen Teil der Klassenbibliothek basieren, können Sie die gleichen Schritte und Regeln zum Verwenden von Datenbankklassen in einer Standard-MFC-Anwendung für das Entwickeln von ActiveX-Steuerelementen verwenden, die die MFC-Datenbankklassen verwenden.

Für eine allgemeine Übersicht über die MFC-Datenbankklassen finden Sie unter MFC-Datenbankklassen (DAO und ODBC).Der Artikel stellt die MFC-ODBC-Klassen und die MFC-DAO-Klassen und verweist auf jedem Sie auf Weitere Details.

HinweisHinweis

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.

Eine parametrisierte Eigenschaft implementieren

Eine parametrisierte Eigenschaft (gelegentlich ein Zeichenfolgenarray Eigenschaft bezeichnet) ist eine Methode für das Verfügbarmachen einer homogenen Auflistung von Werten als einzelne Eigenschaft des Steuerelements.Beispielsweise können Sie eine parametrisierte Eigenschaft verwenden, um ein Array oder ein Wörterbuch als Eigenschaft verfügbar zu machen.In Visual Basic wird 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 er ein Paar Get/Set-Funktionen hinzufügt, die dem Steuerelement Benutzern ermöglichen, die Eigenschaft mit der oben genannten Notation oder der Standardwert weise zuzugreifen.

Ähnlich wie die Methoden und Eigenschaften verfügen über parametrisierte Eigenschaften auch eine Beschränkung auf die zulässige Anzahl von Parametern.Im Fall von parametrisierten Eigenschaften handelt es sich um die Beschränkung 15 Parameter (wenn ein Parameter zum Speichern reserviert ist, des Eigenschaftswerts).

Im folgenden Verfahren wird eine parametrisierte Eigenschaft hinzu, das als Array genannt, zweidimensionales Array von ganzen Zahlen zugegriffen werden kann.

So erstellen 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 Knoten Bibliothek des Steuerelements.

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

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

  5. Im Eigenschaftenname Feld Typ Array.

  6. Im Eigenschaftentyp Feld den Eintrag short.

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

  8. In den Feldern und Get-Funktion Set-Funktion Geben Sie einen eindeutigen Namen für das abrufen und festlegen oder Funktionen akzeptieren die Standardnamen.

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

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

  11. Klicken Sie auf Fertig stellen.

2dffbw6e.collapse_all(de-de,VS.110).gifÄnderungen vom Assistenten zum Hinzufügen von Eigenschaften

Wenn Sie eine benutzerdefinierte Eigenschaft hinzugefügt werden, geht der Assistent zum Hinzufügen von Eigenschaften Änderungen vor. (Header am SteuerelementklassenH) und die Implementierung (.CPP).

Die folgenden Zeilen werden für die Steuerelementklasse hinzugefügt. H-Datei:

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

Dieses Beispiel deklariert zwei Funktionen aufgerufen GetArray und SetArray, die dem Benutzer ermöglichen, eine bestimmte Zeile und einer Spalte anfordern, wenn die Eigenschaft zugreifen.

Darüber hinaus fügt der Assistent zum Hinzufügen von Eigenschaften des Steuerelements dispatchzuordnung die folgenden Zeilen hinzu, in der Implementierung der Steuerelementklassen (.CPP):

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

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

Damit diese Eigenschaft ist hilfreich, können Sie eine Membervariable des zweidimensionalen Arrays in der Steuerelementklasse des Typs zu speichern, short-Werten für die parametrisierte Eigenschaft deklarieren.Sie könnten die Get-Funktion dann ändern, um den Wert zurückgeben, der an der richtigen Zeile und Spalte gespeichert wurde, aufgezeichnet von der Parameter angegeben, und ändern Sie die festgelegte Funktion, um den Wert zu aktualisieren, die von den Parametern für Zeilen und Spalten verwiesen wurde.

Behandeln von Fehlern im ActiveX-Steuerelement

Wenn Fehlerbedingungen im Steuerelement auftreten, müssen Sie möglicherweise der Fehler den Steuerelementcontainer melden.Es gibt zwei Methoden zum Melden von Fehlern, je nachdem, welche Situation, in der der Fehler aufgetreten ist.Wenn der Fehler in einer Eigenschaft auftritt, rufen Sie die Funktion ab oder legen Sie fest oder innerhalb der Implementierung einer OLE-Automatisierungs-Methode, sollte das Steuerelement COleControl::ThrowError aufrufen, die Signalisiert dem Steuerelement Benutzern, dass ein Fehler aufgetreten ist.Wenn der Fehler in einer späteren Zeitpunkt auftritt, sollte das Steuerelement COleControl::FireError aufrufen, die ein vordefiniertes Fehlerereignis aus.

Um den Fehlertyp anzugeben, der auftritt, muss das Steuerelement einen Fehlercode an ThrowError oder FireError übergeben.Ein Fehlercode ist ein OLE-Statuscode, der einen 32-Bit-Wert verfügt.Wenn möglich, wählen Sie einen Fehlercode aus dem Standardsatz von Code aus, die in der OLECTL.H-Headerdatei definiert sind.Die folgende Tabelle enthält eine Zusammenfassung dieser 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 0

CTL_E_OUTOFSTRINGSPACE

Aus Zeichenfolgen heraus leer

CTL_E_OUTOFSTACKSPACE

Nicht genügend Stapelspeicher

CTL_E_BADFILENAMEORNUMBER

Ungültiger Dateiname oder die Anzahl

CTL_E_FILENOTFOUND

Datei nicht gefunden

CTL_E_BADFILEMODE

Der Dateimodus

CTL_E_FILEALREADYOPEN

Datei bereits geöffnet

CTL_E_DEVICEIOERROR

Geräten-E/A-Fehler

CTL_E_FILEALREADYEXISTS

Die Datei ist bereits vorhanden

CTL_E_BADRECORDLENGTH

Länge des Rufs schlechten

CTL_E_DISKFULL

Datenträger ist voll

CTL_E_BADRECORDNUMBER

Anzahl der Rufs schlechten

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

Fehler beim Datei- und Pfad

CTL_E_PATHNOTFOUND

Pfad nicht gefunden

CTL_E_INVALIDPATTERNSTRING

Ungültige Musterzeichenfolge

CTL_E_INVALIDUSEOFNULL

Ungültige Verwendung von NULL

CTL_E_INVALIDFILEFORMAT

Ungültiges Dateiformat

CTL_E_INVALIDPROPERTYVALUE

Ungültiger Eigenschaftswert

CTL_E_INVALIDPROPERTYARRAYINDEX

Ungültiger Zeilenindex array Eigenschaft

CTL_E_SETNOTSUPPORTEDATRUNTIME

Wird zur Laufzeit nicht unterstützt

CTL_E_SETNOTSUPPORTED

Wird nicht unterstützt (schreibgeschützte Eigenschaft)

CTL_E_NEEDPROPERTYARRAYINDEX

Anfordern eigenschaft-Array Zeilenindex

CTL_E_SETNOTPERMITTED

Wird nicht zulässig

CTL_E_GETNOTSUPPORTEDATRUNTIME

Rufen Sie nicht unterstütztes zur Laufzeit

CTL_E_GETNOTSUPPORTED

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

CTL_E_PROPERTYNOTFOUND

Eigenschaft nicht gefunden

CTL_E_INVALIDCLIPBOARDFORMAT

Ungültiges Format der Zwischenablage

CTL_E_INVALIDPICTURE

Ungültiges Bild

CTL_E_PRINTERERROR

Fehler beim Drucker

CTL_E_CANTSAVEFILETOTEMP

Kann TEMP Datei zu speichern

CTL_E_SEARCHTEXTNOTFOUND

Suchen Sie nicht den gefundenen Text

CTL_E_REPLACEMENTSTOOLONG

Ersetzungen zu lang

Sofern notwendig, verwenden Sie die CUSTOM_CTL_SCODE Makro, um einen benutzerdefinierten Fehlercode für eine Bedingung zu definieren, die nicht durch einen der standardmäßigen Codes abgedeckt wird.Der Parameter für das Makro sollte eine ganze Zahl zwischen 1000 und einschließlich 32767 liegen.Beispiele:

#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 denselben numerischen Werten, die das VBX-Steuerelement verwendet, um sicherzustellen, dass die Fehlercodes kompatibel sind.

Besondere Schlüssel im Steuerelement behandeln

In einigen Fällen können Sie bestimmte Tastenkombinationen auf eine besondere Weise behandeln. Fügen Sie z. B. eine neue Zeile eingefügt, wenn die EINGABETASTE einem mehrzeiligen Textfeld-Steuerelement oder eine Verschiebung zwischen einer Gruppe Bearbeitungssteuerelemente gedrückt wurde, als eine direktionale Schlüssel-ID gedrückt hat.

Wenn die Basisklasse des ActiveX-Steuerelements COleControl ist, können Sie CWnd::PreTranslateMessage überschreiben, um Meldungen zu behandeln, bevor der Container sie verarbeitet.Diese Technik wird immer TRUE verwendet wird, wenn die Meldung in der Überschreibung von PreTranslateMessage bearbeiten.

Im folgenden Codebeispiel wird eine mögliche Methode des Behandlung aller Nachrichten, die an den direktionalen Schlüssel verknüpft sind.

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 die Behandlung von tastatur Schnittstellen für ein ActiveX-Steuerelement ActiveX, finden Sie in der Dokumentation.

Dialogfeld-Kontrollen zugreifen, die zur Laufzeit nicht sichtbar sind

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

  • Verwenden des Assistenten zum Hinzufügen von Membervariablen wählen Sie dann die Option Steuerelementvariable und der ID des Steuerelements ausMembervariablen Geben Sie einen Namen ein, und wählen Sie die Wrapperklasse des Steuerelements als Steuerelementtyp aus.

    - oder -

  • Deklarieren Sie eine lokale Variable, und ordnen Sie unter " - Element als das Dialogfeld.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