Controlli ActiveX in Internet

I controlli ActiveX sono la versione aggiornata della specifica di controllo OLE.I controlli sono un'architettura primaria per compilare i componenti software programmabili che possono essere utilizzati in diversi contenitori diversi, inclusi i Web browser COM-informati internet.Qualsiasi controllo ActiveX può essere un controllo internet e può aggiungere la funzionalità a un documento attivo o fa parte di una pagina Web.I controlli in una pagina Web possono comunicare tra loro mediante lo script.

I controlli ActiveX non sono limitati a internet.Un controllo ActiveX può essere utilizzato in qualsiasi contenitore, purché il controllo supporta le interfacce obbligatorie dal contenitore.

I controlli ActiveX presentano vari vantaggi, tra cui:

  • Meno interfacce obbligatorie che i controlli OLE precedenti.

  • La possibilità di essere senza finestra e sempre attivo sul posto.

Per essere un controllo ActiveX, un controllo deve:

  • Supportare l'interfaccia di IUnknown .

  • Essere un oggetto COM.

  • Esportazione DLLRegisterServer e DLLUnRegisterServer.

  • Interfacce aggiuntive di supporto necessari per le funzionalità.

Impostazione dei controlli esistenti Internet-Semplici Da Usare

Progettare un controllo che funzionerà correttamente in un ambiente internet richiede una considerazione per i velociti di trasmissione relativamente basso in internet.È possibile utilizzare i controlli esistenti, tuttavia, esistono misure che è consigliabile adottare per rendere la dimensione del codice più piccola e per eseguire le proprietà del controllo scaricare in modo asincrono.

Per migliorare le prestazioni dei controlli, seguire i suggerimenti sulle considerazioni di efficienza:

  • Implementare le tecniche descritte nell'articolo controlli ActiveX: ottimizzazione.

  • Si consideri ad esempio un controllo viene creata un'istanza.

  • Essere asincrono, non dover altri programmi.

  • Scaricare i dati in piccoli blocchi.

    Quando si scaricano i corsi d'acqua quali bitmap o dati visualizzati, l'accesso ai dati del controllo in modo asincrono in collaborazione con il contenitore.Recuperare i dati in modo incrementale o quanto, funzionante in modo cooperativo con altri controlli che è possibile recuperare i dati.Il codice inoltre possibile scaricare in modo asincrono.

  • Codice e proprietà di download in background.

  • Attivo diventata di utilizzare il più velocemente possibile.

  • Considerare il modo in cui i dati persistenti sono archiviati, le proprietà di grandi dimensioni dati BLOB (ad esempio un'immagine bitmap o dati visualizzati).

    I controlli con le quantità significative di dati persistenti, come le grandi bitmap o file di AVI, richiedono estrema attenzione a scaricare il metodo.Un documento o una pagina può diventare visibile il prima possibile e che consente all'utente di interagire con la pagina quando i controlli recuperano i dati in background.

  • Scrivere le routine efficienti per mantenere la dimensione e il runtime di codice verso il basso.

    Il piccoli pulsante e label, con solo alcuni byte di dati persistenti, sono adatti per l'utilizzo in internet e funzionano nei browser interno.

  • Si consideri lo stato di avanzamento riceve una notifica al contenitore.

    Notificare al contenitore dello stato di avanzamento nel download asincrono, anche quando l'utente può iniziare per interagire con una pagina e quando il download è completo.Il contenitore possibile visualizzare lo stato di avanzamento (come percentuale di completamento) all'utente.

  • Considerare il modo in cui i controlli vengono registrati nel computer client.

Creare un nuovo controllo ActiveX

In creare un nuovo controllo mediante la creazione guidata applicazione, è possibile abilitare il supporto per i moniker asincroni e alle altre ottimizzazioni.Per aggiungere il supporto alle proprietà del controllo di download asincrono, attenersi alla seguente procedura:

Per creare il progetto mediante la Creazione guidata controllo ActiveX MFC

  1. Scegliere New scegliere dal menu di File .

  2. MFC ActiveX Control Wizard selezionato dai progetti Visual C++ e denominare il progetto.

  3. Nella pagina di Control Settings , Loads properties asynchronouslyselezionato.Selezionando questa opzione tempi di installazione di stato pronto e l'evento di modifica dello stato pronto per l'utente.

    È inoltre possibile selezionare altre ottimizzazioni, come Windowless activation, come descritto in controlli ActiveX: ottimizzazione.

  4. Scegliere Fine per creare il progetto.

Per creare una classe derivata da CDataPathProperty

  1. Creare una classe derivata da CDataPathProperty.

  2. In ognuno dei file di origine che includa il file di intestazione per il controllo, aggiungere il file di intestazione per questa classe prima di.

  3. In questa classe, eseguire l'override di OnDataAvailable.Questa funzione viene chiamata ogni volta che i dati siano disponibili per la visualizzazione.Mentre i dati diventano disponibili, è possibile gestirlo in qualsiasi modo scelto, ad esempio progressivamente l'esecuzione del rendering.

    Separazione di codice riportato di seguito viene fornito un esempio semplice progressivamente di visualizzazione dei dati in un controllo di modifica.Si noti l'utilizzo del flag BSCF_FIRSTDATANOTIFICATION rimuovere il controllo di modifica.

    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);
          }
       }
    }
    

    Si noti che è necessario importare AFXCMN.H per utilizzare la classe di CListCtrl .

  4. Quando lo stato viene modificato globali del controllo (ad esempio, caricare un oggetto inizializzato a o dall'utente interattivo), chiamata COleControl::InternalSetReadyState.Se il controllo contiene una singola proprietà del percorso dei dati, è possibile aggiungere il codice in BSCF_LASTDATANOTIFICATION per notificare al contenitore che il download è completo.Di seguito è riportato un esempio:

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. Eseguire l'override di OnProgress.In OnProgress, viene passato un numero che mostri l'intervallo massimo e un numero che mostra fino a che punto lungo il download corrente.È possibile utilizzare questi numeri per visualizzare lo stato come percentuale di completamento all'utente.

La procedura descritta di seguito consente di aggiungere una proprietà al controllo per utilizzare la classe derivata.

Per aggiungere una proprietà

  1. In Visualizzazione classi, fare clic con il pulsante destro del mouse sull'interfaccia sotto il nodo della libreria e selezionare Aggiungi, quindi Aggiungi proprietà.Verrà avviata Add Property Wizard.

  2. In Add Property Wizard, selezionare il pulsante di opzione di Set/Get Methods , digitare Property Name, ad esempio, EditControlText e selezionare la stringa BSTR come Property type.

  3. Fare clic su Fine.

  4. Dichiarare una variabile membro del CDataPathPropertyclasse derivata dalla classe del controllo ActiveX.

    CMyDataPathProperty EditControlText;
    
  5. Implementare i metodi di Get/Set .Per Get, restituire la stringa.Per Set, caricare la proprietà e chiamare SetModifiedFlag.

    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, aggiungere la riga seguente:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Override ResetData per notificare alla proprietà per reimpostare il controllo aggiungendo la seguente riga:

    EditControlText.ResetData();
    

Decidere se derivare da CDataPathProperty o da CCachedDataPathProperty

Nell'esempio precedente vengono descritti i passaggi per derivare la proprietà del controllo da CDataPathProperty.Questa è una scelta ottimale se si scarica i dati in tempo reale che modificano spesso e per il quale non è necessario mantenere tutti i dati, ma solo il valore corrente.Un esempio è un controllo stock ticker.

È anche possibile derivare da CCachedDataPathProperty.In questo caso, i dati scaricati vengono memorizzati nella cache in un file di memoria.Questa è una scelta ottimale se è necessario mantenere tutti i dati scaricati, ad esempio un controllo che esegue il rendering progressivamente un'immagine bitmap.In questo caso, la classe dispone di una variabile membro che contiene i dati:

CMemFile m_Cache;

Nella classe del controllo ActiveX, è possibile utilizzare questo file mappato alla memoria in OnDraw per visualizzare i dati.Nel controllo ActiveX CCachedDataPathPropertyclasse derivata da, eseguire l'override della funzione membro OnDataAvailable e invalidare il controllo, dopo la chiamata l'implementazione della classe base.

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

Download asincrono di dati utilizzando i controlli ActiveX

I dati di download su una rete devono essere eseguiti in modo asincrono.Il vantaggio di questa operazione è che se grandi quantità di dati vengono trasferiti o la connessione troppo lenta, il processo di download non bloccherà altri processi nel client.

I moniker asincroni forniscono un modo per scaricare i dati in modo asincrono su una rete.Un'operazione di lettura restituzione di asincroni di un moniker immediatamente, anche se l'operazione non è stata completata.

Ad esempio, se solo 10 byte sono disponibili e lette viene chiamato in modo asincrono in un file 1K, lettura non blocca, ma restituisce con i 10 byte attualmente disponibili.

Si distribuisce moniker asincroni utilizzando la classe di CAsyncMonikerFile .Tuttavia, i controlli ActiveX possono utilizzare la classe di CDataPathProperty , derivata da CAsyncMonikerFile, per facilitare l'implementazione delle proprietà del controllo asincrone.

L'esempio di ASYNDOWN viene illustrato come impostare un ciclo asincrono utilizzando i timer per leggere i dati.ASYNDOWN sono riportati nell'articolo della Knowledge Base “HOWTO: AsyncDown viene illustrato il download asincrono di dati„ (Q177244) ed è disponibile per il download dall'area download Microsoft.(Per ulteriori informazioni sui file scaricati dall'area download Microsoft, vedere l'articolo “come leggere i file di supporto tecnico Microsoft servizi online„ (Q119591) in Microsoft Knowledge Base). disponibile nel CD della MSDN Library o all'indirizzo https://support.microsoft.com/default.aspx.

La tecnica di base utilizzata in ASYNDOWN è possibile impostare un timer in CDataPathProperty::OnDataAvailable per indicare quando i dati sono disponibili.Quando il messaggio del timer viene ricevuto, l'applicazione legge in 128 blocchi di byte di dati e inserisce un controllo di modifica.Se i dati non sono disponibili se il messaggio del timer viene gestito, il timer è disattivato.OnDataAvailable attiva il timer se più dati arrivano più avanti.

Visualizzazione del controllo in una pagina Web

Di seguito è riportato un esempio di un tag e degli attributi dell'oggetto per l'inserimento del controllo in una pagina Web.

<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>

Aggiornare un controllo OLE esistente per utilizzare le nuove funzionalità del controllo ActiveX

Se il controllo OLE è stato creato con una versione di Visual C++ precedenti alla 4,2, esistono misure che è possibile utilizzare per migliorare le prestazioni e per migliorare la funzionalità.Per una descrizione dettagliata di queste modifiche, vedere controlli ActiveX: ottimizzazione.

Se si aggiunge il supporto asincrono della proprietà a un controllo esistente, è necessario aggiungere i di stato pronto e l'evento di ReadyStateChange manualmente.Nel costruttore per il controllo, aggiungere:

m_lReadyState = READYSTATE_LOADING;

Aggiornare lo stato pronto ad esempio il codice viene scaricato chiamando COleControl::InternalSetReadyState.Un punto che è possibile chiamare InternalSetReadyState proviene da un override di CDataPathPropertyclasse derivata di OnProgress .

Quindi, seguire i passaggi in creare un nuovo controllo ActiveX.

Vedere anche

Concetti

Attività di programmazione per Internet MFC

Nozioni fondamentali della programmazione per Internet MFC