Sdílet prostřednictvím


Ovládací prvky ActiveXna Internetu

technologie ActiveX ovládací prvky jsou aktualizovanou verzí specifikace ovládacího prvku OLE.

Důležité

technologie ActiveX je starší technologie, která by se neměla používat pro nový vývoj. Další informace naleznete v tématu technologie ActiveX Ovládací prvky.

Ovládací prvky jsou primární architekturou pro vývoj programovatelných softwarových komponent, které lze použít v různých kontejnerech, včetně webových prohlížečů podporujících modelu COM na internetu. Libovolný ovládací prvek technologie ActiveX může být ovládací prvek internetu a může přidat jeho funkce do aktivního dokumentu nebo být součástí webové stránky. Ovládací prvky na webové stránce spolu můžou komunikovat pomocí skriptování.

technologie ActiveX ovládací prvky nejsou omezeny na internet. Ovládací prvek technologie ActiveX lze použít také v libovolném kontejneru, pokud ovládací prvek podporuje rozhraní vyžadovaná tímto kontejnerem.

technologie ActiveX ovládací prvky mají několik výhod, mezi které patří:

  • Méně požadovaných rozhraní než předchozí ovládací prvky OLE.

  • Možnost být bez oken a vždy aktivní.

Aby byl ovládací prvek technologie ActiveX, musí ovládací prvek:

  • IUnknown Podporuje rozhraní.

  • Být objektem COM.

  • Export dllRegisterServer a DLLUnRegisterServer.

  • Podle potřeby můžete podporovat další rozhraní pro funkce.

Vytvoření stávajících ovládacích prvků přívětivých pro internet

Návrh ovládacího prvku, který bude dobře fungovat v internetovém prostředí, vyžaduje zvážení relativně nízké přenosové rychlosti na internetu. Můžete použít existující ovládací prvky; Existuje však postup, jak zmenšit velikost kódu a nastavit, aby se vlastnosti ovládacího prvku stáhly asynchronně.

Pokud chcete zvýšit výkon ovládacích prvků, postupujte podle těchto tipů k aspektům efektivity:

  • Implementujte techniky popsané v článku technologie ActiveX Ovládací prvky: Optimalizace.

  • Zvažte vytvoření instance ovládacího prvku.

  • Být asynchronní; neudržujte jiné programy.

  • Stáhněte si data v malých blocích.

    Při stahování velkých datových proudů, jako jsou rastrové obrázky nebo data videa, přistupujte k datům ovládacího prvku asynchronně ve spolupráci s kontejnerem. Načtěte data přírůstkovým nebo progresivním způsobem a spolupracujte s dalšími ovládacími prvky, které mohou také načítat data. Kód se také může stahovat asynchronně.

  • Stáhněte si kód a vlastnosti na pozadí.

  • Co nejrychleji se staňte aktivním uživatelským rozhraním.

  • Zvažte, jak se ukládají trvalá data, a to jak vlastnosti, tak velké datové objekty BLOB (například rastrový obrázek nebo video data).

    Ovládací prvky s významným množstvím trvalých dat, jako jsou velké rastrové obrázky nebo soubory AVI, vyžadují pečlivou pozornost při stahování metody. Dokument nebo stránka se můžou co nejdříve zobrazit a umožnit uživateli interakci se stránkou, zatímco ovládací prvky načítají data na pozadí.

  • Napište efektivní rutiny, které udržují velikost kódu a dobu běhu.

    Malé ovládací prvky tlačítek a popisků s několika bajty trvalých dat jsou vhodné pro použití v internetovém prostředí a dobře fungují v prohlížečích.

  • Zvažte průběh komunikace s kontejnerem.

    Upozorněte kontejner na průběh asynchronního stahování, včetně toho, kdy uživatel může začít pracovat se stránkou a po dokončení stahování. Kontejner může uživateli zobrazit průběh (například procento dokončení).

  • Zvažte, jak jsou ovládací prvky zaregistrované v klientském počítači.

Vytvoření nového ovládacího prvku technologie ActiveX

Při vytváření nového ovládacího prvku pomocí Průvodce aplikací můžete povolit podporu asynchronních monikerů a dalších optimalizací. Pokud chcete přidat podporu pro asynchronní stahování vlastností ovládacího prvku, postupujte takto:

Vytvoření projektu pomocí Průvodce ovládacími prvky MFC technologie ActiveX

  1. Klepněte na tlačítko Nový v nabídce Soubor .

  2. V projektech visual Studio C++ vyberte Průvodce ovládacím prvekem MFC technologie ActiveX a pojmenujte projekt.

  3. Na stránce Ovládací prvek Nastavení vyberte asynchronně načítat vlastnosti. Výběrem této možnosti nastavíte připravenou vlastnost stavu a událost změny stavu připraveno za vás.

    Můžete také vybrat další optimalizace, například aktivaci bez oken, která je popsaná v ovládacích prvcích technologie ActiveX: Optimalizace.

  4. Zvolte Dokončit a vytvořte projekt.

Vytvoření třídy odvozené z CDataPathProperty

  1. Vytvoření třídy odvozené z CDataPathProperty.

  2. Do každého zdrojového souboru, který obsahuje hlavičkový soubor pro váš ovládací prvek, přidejte před něj soubor záhlaví pro tuto třídu.

  3. V této třídě přepište OnDataAvailable. Tato funkce se volá vždy, když jsou data k dispozici pro zobrazení. Jakmile budou data dostupná, můžete je zpracovat libovolným způsobem, například tak, že je postupně vykreslujete.

    Níže uvedený výňatek kódu představuje jednoduchý příklad postupného zobrazení dat v ovládacím prvku pro úpravy. Všimněte si použití příznaku BSCF_FIRSTDATANOTIFICATION k vymazání ovládacího prvku pro úpravy.

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

    Nezapomeňte, že musíte zahrnout AFXCMN. H použít CListCtrl třídu.

  4. Když se změní celkový stav ovládacího prvku (například z načítání na inicializovaný nebo interaktivní uživatel), zavolejte COleControl::InternalSetReadyState. Pokud má váš ovládací prvek pouze jednu vlastnost cesty k datům, můžete do BSCF_LASTDATANOTIFICATION přidat kód, který kontejneru oznámí, že je stahování dokončené. Příklad:

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. Přepsat OnProgress. V OnProgresspřípadě, že se předá číslo znázorňující maximální rozsah a číslo ukazující, jak daleko je aktuální stahování. Tato čísla můžete použít k zobrazení stavu, například procenta dokončení uživateli.

Další procedura přidá do ovládacího prvku vlastnost, která použije právě odvozenou třídu.

Přidání vlastnosti

  1. V zobrazení tříd klikněte pravým tlačítkem myši na rozhraní pod uzlem knihovny a vyberte Přidat a pak Přidat vlastnost. Spustí se Průvodce přidáním vlastnosti.

  2. V Průvodci přidáním vlastnosti vyberte přepínač Set/Get Methods, zadejte název vlastnosti, například EditControlText, a jako typ vlastnosti vyberte BSTR.

  3. Klikněte na Finish (Dokončit).

  4. Deklarujte členovou proměnnou třídy CDataPathProperty-odvozené do technologie ActiveX třídy ovládacího prvku.

    CMyDataPathProperty EditControlText;
    
  5. Implementujte Get/Set metody. Pokud Getchcete, vraťte řetězec. Pro Setnačtení vlastnosti a volání 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. DoPropExchange přidejte následující řádek:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Přepsat ResetData upozornit vlastnost obnovit jeho ovládací prvek přidáním tohoto řádku:

    EditControlText.ResetData();
    

Rozhodování o tom, jestli se má odvodit z CDataPathProperty nebo CCachedDataPathProperty

Předchozí příklad popisuje kroky pro odvození vlastnosti ovládacího prvku z CDataPathProperty. To je dobrá volba, pokud stahujete data v reálném čase, která se často mění, a pro která nemusíte uchovávat všechna data, ale pouze aktuální hodnotu. Příkladem je ovládací prvek burzovního ovládacího prvku.

Můžete také odvodit .CCachedDataPathProperty V takovém případě se stažená data ukládají do mezipaměti v souboru paměti. To je dobrá volba, pokud potřebujete zachovat všechna stažená data – například ovládací prvek, který postupně vykresluje rastrový obrázek. V tomto případě má třída členovou proměnnou obsahující vaše data:

CMemFile m_Cache;

V technologie ActiveX třídy ovládacího prvku můžete k zobrazení dat použít tento soubor mapovaný OnDraw v paměti. V technologie ActiveX control CCachedDataPathProperty-odvozené třídy přepište členskou funkci OnDataAvailable a zneplatněte ovládací prvek po volání implementace základní třídy.

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

Asynchronní stahování dat pomocí ovládacích prvků technologie ActiveX

Stahování dat přes síť by se mělo provádět asynchronně. Výhodou je, že pokud se přenáší velké množství dat nebo pokud je připojení pomalé, proces stahování nebude blokovat další procesy v klientovi.

Asynchronní monikers poskytují způsob, jak stahovat data asynchronně přes síť. Operace čtení asynchronního monikeru se vrátí okamžitě, i když operace nebyla dokončena.

Pokud jsou například k dispozici pouze 10 bajtů a čtení je voláno asynchronně v souboru 1K, čtení neblokuje, ale vrátí s aktuálně dostupnými 10 bajty.

Implementujete asynchronní monikery pomocí CAsyncMonikerFile třídy. Technologie ActiveX ovládací prvky však mohou použít CDataPathProperty třídu, která je odvozena z CAsyncMonikerFile, k implementaci asynchronních vlastností ovládacího prvku.

Zobrazení ovládacího prvku na webové stránce

Tady je příklad značky objektu a atributů pro vložení ovládacího prvku na webovou stránku.

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

Aktualizace existujícího ovládacího prvku OLE tak, aby používal nové funkce ovládacího prvku technologie ActiveX

Pokud byl ovládací prvek OLE vytvořen s verzí Visual C++ před verzí 4.2, můžete podniknout kroky ke zlepšení jeho výkonu a vylepšení jeho funkčnosti. Podrobné informace o těchto změnách najdete v tématu technologie ActiveX Ovládací prvky: Optimalizace.

Pokud přidáváte podporu asynchronních vlastností do existujícího ovládacího prvku, budete muset přidat připravenou vlastnost stavu a ReadyStateChange událost sami. Do konstruktoru ovládacího prvku přidejte:

m_lReadyState = READYSTATE_LOADING;

Stav připravenosti aktualizujete tak, jak se váš kód stáhne voláním COleControl::InternalSetReadyState. Jedno místo, které můžete volat InternalSetReadyState , je z OnProgress přepsání CDataPathProperty-odvozené třídy.

Viz také

Úlohy internetového programování MFC
Základy internetového programování v prostředí MFC