ActiveX-Steuerelemente im Internet

ActiveX-Steuerelemente sind die aktualisierte Version der OLE-Steuerelement-Spezifikation.Steuerelemente sind eine primäre Architektur für die Entwicklung von programmierbaren Softwarekomponenten, die in einer Vielzahl verschiedener Containern verwendet werden können, einschließlich COM-bewusste Webbrowser im Internet.Jedes ActiveX-Steuerelement kann ein Internet-Steuerelement sein und kann seine Funktionalität einem aktiven Dokument oder einen Teil einer Webseite sein.Steuerelemente auf einer Webseite können die Skripterstellung mit der miteinander kommunizieren.

ActiveX-Steuerelemente sind nicht das Internet beschränkt.Ein ActiveX-Steuerelement kann in jedem Container auch verwendet werden, wenn das Steuerelement die Schnittstellen unterstützt, die von diesem Container erforderlich sind.

ActiveX-Steuerelemente weisen einige Vorteile. Dazu zählen:

  • Weniger als vorherige OLE-Steuerelemente erforderliche Schnittstellen.

  • Die Fähigkeit, fensterlos und immer direkt aktiviert sein.

Um ein ActiveX-Steuerelement, muss ein Steuerelement sein:

  • Sichern Sie die IUnknown-Schnittstelle.

  • Stellen Sie ein COM-Objekt.

  • Export DLLRegisterServer und DLLUnRegisterServer.

  • Schnittstellen nach Bedarf zusätzliche Unterstützung für Funktionen.

Ihre vorhandenen Steuerelemente erstellen Internet-Benutzerfreundlich

Das Entwerfen eines Steuerelements, das gut in einer Internet-Umgebung ausgeführt wird, erfordert Überlegung für die relativ niedrigen Übertragungsraten im Internet.Sie können die vorhandenen Steuerelementen verwendet werden. Allerdings gibt es Schritte ausführen müssen, um die kleiner Codegröße ausführen und die Steuerelementeigenschaften asynchron herunterladen kann.

Um die Leistung von Steuerelementen zu verbessern, führen Sie die folgenden Tipps für Leistungsfähigkeits-Überlegungen:

  • Implementieren Sie die Methoden beschrieben, die im Artikel ActiveX-Steuerelemente: Optimierung beschrieben werden.

  • Betrachten Sie z. B. ein Steuerelement instanziiert wird.

  • Stellen Sie asynchron. halten Sie keine andere Programme.

  • Laden von Daten in kleinen Blöcken herunter.

    Wenn Sie umfangreiche Streams z. B. Bitmaps oder Videosignale herunterladen, greifen Sie auf die Daten eines Steuerelements asynchron in Zusammenarbeit mit dem Container zu.Rufen Sie die Daten in einem inkrementellen oder progressiven Weise abgerufen und an anderen Steuerelementen gemeinsam verwenden, die möglicherweise auch Daten abrufen.Code kann auch asynchron herunterladen.

  • Herunterladen von Code und Eigenschaften im Hintergrund.

  • Gewordene Benutzeroberfläche aktiv so schnell wie möglich.

  • Betrachten Sie z. B. dauerhafte Daten, Eigenschaften und umfangreiche Daten BLOB gespeichert wird (z. B. ein Bitmapbild oder Videosignale).

    Steuerelemente mit erheblichen Mengen permanenten Daten, z. B. große Bitmaps oder AVI-Dateien, erfordern eine sorgfältige Aufmerksamkeit auf das Herunterladen von Methode.Ein Dokument oder eine Seite sichtbar können so schnell wie möglich sein und kann der Benutzer mit der Seite interagieren, während Steuerelemente Daten im Hintergrund abrufen.

  • Schreiben Sie die effiziente Routinen, die Codegröße und - Laufzeit unten zu halten.

    Kleine Schaltfläche und Label-Steuerelemente, mit nur einigen Bytes permanenten Daten, sind für die Verwendung in der Internet-Umgebung innere arbeiten und sich gut des Browsers.

  • Betrachten Sie den Status auf den Container übermittelt wird.

    Melden Sie sich den Container im Status des asynchronen Herunterladen und enthalten, wann der Benutzer gestartet werden kann, um mit der Seite interagieren und wann der Download abgeschlossen ist.Der Container kann Status (z. B. Prozent voll) für den Benutzer angezeigt werden.

  • Betrachten Sie z. B. Steuerelemente auf dem Clientcomputer registriert werden.

Ein neues ActiveX-Steuerelement erstellen

Wenn Sie ein neues Steuerelement mithilfe des Anwendungs-Assistenten erstellt haben, können Sie wählen, um Unterstützung für asynchrone Moniker sowie andere Optimierungen zu aktivieren.Zur Unterstützung der Download steuerelementeigenschaften asynchron hinzuzufügen, führen Sie die folgenden Schritte aus:

So stellen Sie das Projekt erstellen mit dem MFC-ActiveX-Steuerelement-Assistenten

  1. Klicken Sie auf New im Menü Datei.

  2. Wählen Sie MFC-ActiveX-Steuerelement-Assistent von Visual C++-Projekten und nennen Sie das Projekt.

  3. Wählen Sie auf der Seite SteuerelementeinstellungenLädt Eigenschaften asynchron.Diese Option auswählen, installiert das betriebsbereite Zustandseigenschaften und das Changed-Ereignis des Status Bereit für Sie.

    Sie können auch andere Optimierungen, wie Fensterlose Aktivierung auswählen, das in ActiveX-Steuerelemente: Optimierung beschrieben wird.

  4. Wählen Sie Fertig stellen, um das Projekt zu erstellen.

So erstellen Sie eine Klasse abgeleitet von CDataPathProperty

  1. Erstellen Sie eine Klasse, die von CDataPathProperty abgeleitet ist.

  2. In jeder der Quelldateien, die die Headerdatei für das Steuerelement enthält, fügen Sie die Headerdatei für diese Klasse vor ihr hinzufügen.

  3. In dieser Klasse überschreiben Sie OnDataAvailable.Diese Funktion wird aufgerufen, wenn Daten für die Anzeige verfügbar ist.Während Daten verfügbar ist, können Sie sie behandeln jede Methode, die Sie auswählen, wie z. B. indem Sie nach und nach sie rendern.

    Der folgende Code ist ein einfaches Beispiel für Daten in einem Bearbeitungssteuerelement nach und nach anzeigen.Beachten Sie die Verwendung des Flags BSCF_FIRSTDATANOTIFICATION, das Bearbeitungssteuerelement zu löschen.

    void CMyDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
    {
        CListCtrl list_ctrl;
        CEdit* edit = list_ctrl.GetEditControl();
        if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) && edit->m_hWnd)
        {
            edit->SetSel(0, -1);
            edit->Clear();
        }
    
       if (dwSize > 0)
       {
          CString string;
          LPTSTR str = string.GetBuffer(dwSize);
          UINT nBytesRead = Read(str, dwSize);
          if (nBytesRead > 0)
          {
             string.ReleaseBuffer(nBytesRead);
             edit->SetSel(-1, -1);
             edit->ReplaceSel(string);
          }
       }
    }
    

    Beachten Sie, dass Sie AFXCMN.H einfügen müssen, um die CListCtrl-Klasse zu verwenden.

  4. Wenn Gesamte Zustandsänderungen des Steuerelements (z. B. aus dem Laden nach initialisiert oder interaktiv), rufen Sie COleControl::InternalSetReadyState.Wenn das Steuerelement nur einen Datenpfad - Eigenschaft verfügt, können Sie Code hinzufügen, um BSCF_LASTDATANOTIFICATION auf den Container zu benachrichtigen, dass der Download abgeschlossen ist.Beispiele:

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. Überschreiben Sie OnProgress.In OnProgress werden Ihnen eine Zahl die maximale Bereichs und einer vertretung Anzeigen von Zahlen übergeben, inwieweit die am aktuellen Download ist.Sie können diese Zahlen verwenden, um den Status wie Prozent voll dem Benutzer angezeigt wird.

In der folgenden Prozedur wird eine Eigenschaft dem Steuerelement hinzu, um die abgeleitete Klasse zu verwendenden aktuell.

So fügen Sie eine Eigenschaft hinzu

  1. In Klassenansicht mit der rechten Maustaste auf die Schnittstelle zwischen den Knoten Bibliothek auswählen und dann HinzufügenEigenschaft hinzufügen.Dadurch wird Assistent zum Hinzufügen von Eigenschaften.

  2. In Assistent zum Hinzufügen von Eigenschaften aktivieren Sie das Optionsfeld Set/Get-Methoden aus, geben Sie Eigenschaftenname z. B. EditControlText ein, und wählen Sie Eigenschaftentyp als BSTR aus.

  3. Klicken Sie auf Fertig stellen.

  4. Deklarieren Sie eine Membervariable vom CDataPathProperty abgeleiteten Klasse auf die ActiveX-Steuerelementklasse.

    CMyDataPathProperty EditControlText;
    
  5. Implementieren Sie die Get/Set-Methoden.Für Get geben Sie die Zeichenfolge zurück.Für Set laden Sie die Eigenschaft, und rufen Sie SetModifiedFlag an.

    BSTR CMFCActiveXControlCtrl::GetEditControlText(void)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       CString strResult;
       strResult = EditControlText.GetPath();   
       return strResult.AllocSysString();
    }
    
    void CMFCActiveXControlCtrl::SetEditControlText(LPCTSTR newVal)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       Load(newVal, EditControlText);
       SetModifiedFlag();
    }
    
  6. In DoPropExchange fügen Sie die folgende Zeile hinzu:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Überschreiben ResetData, um die Eigenschaft zu benachrichtigen, um das Steuerelement durch Hinzufügen dieser Zeile zurückzusetzen:

    EditControlText.ResetData();
    

Es CDataPathProperty entscheiden, ob der CCachedDataPathProperty berechnet oder aus

Im vorherigen Beispiel beschreibt eine schrittweise Anleitung zum Berechnen der Eigenschaft des Steuerelements aus CDataPathProperty.Dies ist eine gute Wahl, wenn Sie Echtzeitdaten herunterladen, die sich selten ändern sowie zu Sie müssen nicht alle Daten zu halten, aber nur der aktuelle Wert.Ein Beispiel hierfür ist ein Börsenticker erstellen Steuerelement.

Sie können auch CCachedDataPathProperty berechnen.In diesem Fall wird die heruntergeladenen Daten in einer Arbeitsspeicherdatei zwischengespeichert.Dies ist eine gute Wahl, wenn Sie alle heruntergeladenen Daten beibehalten müssen, z. B. ein Steuerelement, das nach und nach einer Bitmap rendert.In diesem Fall verfügt die Klasse über eine Membervariable, in der die Daten enthält:

CMemFile m_Cache;

In der ActiveX-Steuerelementklasse können Sie diese Speicherabbilddatei in OnDraw verwenden, um die Daten anzuzeigen.In einem ActiveX-Steuerelement CCachedDataPathProperty abgeleitete Klasse, und überschreiben Sie die Memberfunktion OnDataAvailable ungültig erklärt Sie das Steuerelement, nachdem Sie die Basisklassenimplementierung aufgerufen haben.

void CMyCachedDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   CCachedDataPathProperty::OnDataAvailable(dwSize, bscfFlag);
   GetControl()->InvalidateControl();
}

Downloading-Daten asynchron mit ActiveX-Steuerelementen

Herunterladen von Daten über ein Netzwerk können asynchron ausgeführt werden.Der Vorteil der Fall ist, dass, wenn eine große Datenmenge übertragen wird, oder wenn die Verbindung langsam ist der Download Prozess blockiert keine anderen Prozessen auf dem Client.

Asynchrone Moniker bieten eine Möglichkeit, Daten über ein Netzwerk asynchron herunter.Ein Lesevorgang bei einem asynchronen Moniker kehrt sofort zurück. Dies gilt auch, wenn der Vorgang nicht abgeschlossen wurde.

Wenn beispielsweise nur 10 Bytes verfügbar sind und Lesevorgänge für eine Datei asynchron aufgerufen wird, ist 1K gelesen, jedoch wird erst mit den derzeit verfügbaren 10 Bytes zurück.

Implementieren Sie asynchrone Moniker mithilfe der CAsyncMonikerFile-Klasse.ActiveX-Steuerelemente können jedoch die CDataPathProperty-Klasse verwenden, die von CAsyncMonikerFile abgeleitet ist, um asynchrone Steuerelementeigenschaften zu implementieren.

Das ASYNDOWN-Beispiel wird das Erstellen einer asynchronen Schleife mithilfe der Zeitgeber installiert, um die Daten zu lesen.ASYNDOWN wird ausführlich im Knowledge Base-Artikel "HOWTO beschrieben: AsyncDown wird asynchronen Daten-Download" (Q177244) und ist im Microsoft Download Center heruntergeladen werden.(Weitere Informationen zum Herunterladen von Dateien aus dem Microsoft Download Center finden Sie im Artikel "wie Support-Dateien von Microsoft erhalten Onlinediensten" (Q119591) in der Microsoft Knowledge Base.) Knowledge Base-Artikel finden Sie auf der MSDN Library-CD-ROM oder unter https://support.microsoft.com/default.aspx.

Die grundlegende Technik, die in ASYNDOWN verwendet wird, besteht darin, einen Zeitgeber in CDataPathProperty::OnDataAvailable festlegen, um anzugeben, wann Daten verfügbar sind.Wenn der Zeitgeber für eine empfangen wird, liest die Anwendung in 128 Byte Daten blockiert und füllt ein Bearbeitungssteuerelement aus.Wenn Daten nicht verfügbar ist, wenn der Zeitgeber für eine bearbeitet wird, wird der Zeitgeber ausgeschaltet.OnDataAvailable schaltet den Zeitgeber ein, wenn mehr Daten später ankommt.

Ein Steuerelement auf einer Webseite anzeigen

Im Folgenden finden Sie ein Beispiel für ein Objekt tages und - Attribute zum Einfügen eines Steuerelements auf einer Webseite.

<OBJECT

CLASSID="clsid:FC25B780-75BE-11CF-8B01-444553540000"

CODEBASE="/ie/download/activex/iechart.ocx"

ID=chart1

WIDTH=400

HEIGHT=200

ALIGN=center

HSPACE=0

VSPACE=0

>

<PARAM NAME="BackColor" value="#ffffff">

<PARAM NAME="ForeColor" value="#0000ff">

<PARAM NAME="url" VALUE="/ie/controls/chart/mychart.txt">

</OBJECT>

Ein vorhandenes OLE-Steuerelement aktualisieren, um neue ActiveX-Steuerelement-Funktionen zu verwenden

Wenn das OLE-Steuerelement mit einer Version von Visual C++ vor 4.2 erstellt wurde, gibt es Schritte ausführen können, um die Leistung zu verbessern und ihre Funktionalität zu verbessern.Ausführliche Informationen über diese Änderungen finden Sie ActiveX-Steuerelemente: Optimierung.

Wenn Sie asynchrone Unterstützung von Eigenschaften auf ein vorhandenes Steuerelement hinzufügen, müssen Sie die betriebsbereite Zustandseigenschaften und das ReadyStateChange-Ereignis hinzufügen.Im Konstruktor für das Steuerelement, fügen Sie ein:

m_lReadyState = READYSTATE_LOADING;

Aktualisieren Sie den Zustand Bereit, wie der Code heruntergeladen wird, indem COleControl::InternalSetReadyState aufruft.Ein InternalSetReadyState Speicherplatz, den Sie aufrufen können, ist von der OnProgress Überschreibung von CDataPathProperty abgeleiteten Klasse.

Dann führen Sie die Schritte in Ein neues ActiveX-Steuerelement erstellen.

Siehe auch

Konzepte

MFC-Internet-Programmieraufgaben

MFC-Internet-Programmie Grundlagen