Formanty ActiveX w Internecie

Formanty ActiveX są zaktualizowanej wersji specyfikacji formantu OLE.Kontrole są podstawowe architektury dla projektowania składników oprogramowania programowalne, które mogą być używane w szeregu różnych pojemnikach, łącznie z przeglądarki sieci Web obsługującej COM w Internecie.Wszystkie formanty ActiveX mogą być formantu Internet i można dodać jego funkcjonalności do aktywnego dokumentu lub stanowić część strony sieci Web.Formanty na stronie sieci Web mogą komunikować się ze sobą za pomocą skryptów.

Formanty ActiveX nie są ograniczone do Internetu.Formant ActiveX można również w dowolnym kontenerze, tak długo, jak długo formant obsługuje interfejsy wymagane w tym kontenerze.

Formanty ActiveX mają kilka zalet, w tym:

  • Mniej wymagane interfejsy niż poprzednie formanty OLE.

  • Zdolność do okien i aktywnych zawsze w miejscu.

Aby formant ActiveX, formant musi:

  • Wsparcie IUnknown interfejsu.

  • Być obiektu COM.

  • Wywóz DLLRegisterServer i DLLUnRegisterServer.

  • W razie potrzeby do obsługi funkcji także obsługiwać dodatkowe interfejsy.

Dokonywanie internetowe przyjazne istniejących formantów

Projektowanie formant, który będzie działał również w środowisku sieci Internet wymaga uwzględnienia dla względnie małe szybkości transmisji w Internecie.Można użyć istniejące mechanizmy kontrolne; Jednakże istnieją kroki, które należy podjąć, aby zmniejszyć rozmiar kodu i aby swoje właściwości formantu Pobierz asynchronicznie.

Aby poprawić wydajność formanty, wykonaj te wskazówki, zagadnienia wydajności:

  • Wdrożenie technik opisanych w artykule formantów ActiveX: Optymalizacja.

  • Należy wziąć pod uwagę, jak utworzyć wystąpienia formantu.

  • Być asynchroniczne; nie zajmują się inne programy.

  • Pobieranie danych w małych blokach.

    Podczas pobierania dużych strumieni, takie jak mapy bitowe lub danych wideo, dostęp do danych formantu asynchronicznie we współpracy z kontenera.Pobierać dane w sposób przyrostowy lub stopniowy, praca wspólnie z innymi formantami, które mogą również pobieranie danych.Kod można także mogą pobierać asynchronicznie.

  • Pobierz kod i właściwości w tle.

  • Interfejs użytkownika stają się aktywne, tak szybko jak to możliwe.

  • Należy wziąć pod uwagę jak trwałe dane są przechowywane, zarówno właściwości, jak i dużych danych plamy (na przykład obraz lub plik wideo dane bitmapy).

    Formanty znaczne ilości środków trwałych danych, takich jak duże mapy bitowe lub plików AVI, wymagają szczególną uwagę na metodę pobierania.Dokument lub stronę można stają się widoczne możliwie jak najszybciej i umożliwia użytkownikowi oddziaływać na stronie podczas kontroli pobierania danych w tle.

  • Pisanie procedur wydajne, aby utrzymać rozmiar kodu i w czasie wykonywania w dół.

    Małych przycisków i etykiet formantów zawierających tylko kilka bajtów danych trwałych, są odpowiednie do użycia w środowisku internetowych oraz prac także wewnątrz przeglądarki.

  • Należy wziąć pod uwagę, że postęp jest przekazywana do kontenera.

    Powiadamia kontener o postępie w asynchroniczne pobieranie, gdy użytkownik może zacząć korzystać ze strony oraz po zakończeniu pobierania.Pojemnik można wyświetlić postęp (takie jak procent ukończenia) do użytkownika.

  • Należy wziąć pod uwagę, jak formanty są zarejestrowane na komputerze klienckim.

Tworzenie nowego formantu ActiveX

Podczas tworzenia nowego formantu przy użyciu Kreatora konfiguracji aplikacji, można włączyć obsługę monikerów asynchronicznych, jak również innych optymalizacje.Aby dodać obsługę asynchronicznie pobrać właściwości formantu, wykonaj następujące kroki:

Do tworzenia projektu przy użyciu Kreatora formantów ActiveX MFC

  1. Kliknij przycisk New na pliku menu.

  2. Wybierz Kreatora formantów ActiveX MFC z Visual C++ projektów i nazwę projektu.

  3. Na Ustawienia sterowania stronę, wybierz opcję asynchronicznie ładuje właściwości.Ta opcja ustawia właściwość stanu gotowości i zdarzenia gotowy stan zmienił się dla Ciebie.

    Można także wybrać inne optymalizacje, takich jak bez okna aktywacji, który jest opisany w formantów ActiveX: Optymalizacja.

  4. Wybierz Zakończ Aby utworzyć projekt.

Aby utworzyć klasę pochodną CDataPathProperty

  1. Utwórz klasę pochodną CDataPathProperty.

  2. W każdym z plików źródłowych, które zawiera plik nagłówka formantu Dodaj plik nagłówka dla tej klasy przed nim.

  3. W tej klasie zastąpić OnDataAvailable.Ta funkcja jest wywoływana w każdym przypadku, gdy dane są dostępne do wyświetlania.Jak dane stają się dostępne, może obsługiwać dowolny sposób wybierzesz, na przykład przez stopniowo powodującym ich.

    Poniższy fragment kodu jest prosty przykład stopniowe wyświetlanie danych w formancie edycji.Należy zauważyć użycie flagi BSCF_FIRSTDATANOTIFICATION , aby je wyczyścić formantu edycyjnego.

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

    Należy zauważyć, że może to AFXCMN.H, aby użyć CListCtrl klasy.

  4. Gdy ogólny formantu zmieni się stan (na przykład z ładowania do zainicjowanej lub użytkownik interakcyjny), call COleControl::InternalSetReadyState.Jeśli formant ma właściwość path danych tylko jednego, można dodać kod na BSCF_LASTDATANOTIFICATION do powiadamiania kontenera zakończeniu pobierania.Na przykład:

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. Zastąp OnProgress.W OnProgress, są przekazywane liczbę wyświetlono maksymalny zasięg i liczby wyświetlane jak daleko wzdłuż aktualny proces pobierania jest.Numery te służy do wyświetlania stanu na przykład procentu wykonania do użytkownika.

Następna procedura dodaje właściwość do kontroli użycia klasy tylko pochodnych.

Aby dodać właściwość

  1. W Widok klasy, kliknij prawym przyciskiem myszy interfejs poniżej tego węzła biblioteki i wybierz Dodaj, następnie Dodaj właściwość.Spowoduje to uruchomienie Kreatora dodawania właściwości.

  2. W Kreatora dodawania właściwości, wybierz opcję Metody Set/Get przycisk radiowy, typ Nazwa właściwości, na przykład, EditControlText i wybierz BSTR jako Typ właściwości.

  3. Kliknij Zakończ.

  4. Deklaruje zmienną Członkowskie Twój CDataPathProperty-pochodzi z klasy do klasy formantu ActiveX.

    CMyDataPathProperty EditControlText;
    
  5. Implementacja Get i Set metody.Dla się, zwracają ciąg.Dla Set, załadować właściwości i wywołanie 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. W DoPropExchange, należy dodać następujący wiersz:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Zastąpić ResetData do powiadamiania właściwość, aby zresetować jego kontroli przez dodanie tego wiersza:

    EditControlText.ResetData();
    

Decydowania o pochodzić od CDataPathProperty lub CCachedDataPathProperty

Poprzedni przykład opisuje kroki dla wyprowadzania właściwość z formantu z CDataPathProperty.Jest to dobry wybór w przypadku pobierania danych w czasie rzeczywistym, który często ulega zmianie i dla którego nie trzeba zachować wszystkie dane, ale tylko bieżącą wartość.Przykładem jest formantem telegrafu giełdowego.

Może również pochodzić od CCachedDataPathProperty.W tym przypadku pobrane dane są buforowane w pliku pamięci.To jest dobre rozwiązanie, jeśli trzeba zachować wczytanych danych — na przykład formant, który stopniowo renderuje mapy bitowej.W tym przypadku klasa ma zmienną z danymi:

CMemFile m_Cache;

W klasie formantu ActiveX, można użyć tego pliku mapowanego pamięci w OnDraw do wyświetlania danych.W formantu ActiveX CCachedDataPathProperty-klasy, zastąpić element członkowski funkcja OnDataAvailable i unieważnia formantu, po wywołaniu Implementacja klasy podstawowej.

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

Pobieranie danych asynchronicznie za pomocą formantów ActiveX

Pobieranie danych przez sieć powinny być wykonywane asynchronicznie.Tę zaletę więc to, że jeśli dużą ilość danych jest przeniesiony lub jeśli połączenie jest powolne, proces pobierania nie będzie blokował innych procesów na komputerze klienckim.

Asynchroniczne monikerów umożliwiają asynchronicznego pobrania danych przez sieć.Operację odczytu asynchronicznego moniker zwraca natychmiast, nawet jeśli operacja nie została ukończona.

Na przykład jeśli tylko 10 bajtów są dostępne i odczytu nazywa się asynchronicznie na plik 1K, odczytu nie są blokowane, ale zwraca z aktualnie dostępnych bajtów 10.

Można zaimplementować asynchronicznego monikerów za pomocą CAsyncMonikerFile klasy.Jednak można użyć formantów ActiveX CDataPathProperty klasy, która jest pochodną CAsyncMonikerFile, pomagających w realizacji właściwości formantu asynchronicznego.

Próbki ASYNDOWN ilustruje sposób skonfigurować pętli asynchronicznego odczytywania danych przy użyciu czasomierzy.ASYNDOWN opisano szczegółowo w artykule bazy wiedzy Knowledge Base "PORADNIKI: AsyncDown pokazuje asynchronicznego wczytywania danych" (Q177244) i jest dostępny do pobrania w witrynie Microsoft Download Center. (Aby uzyskać więcej informacji dotyczących pobierania plików w witrynie Microsoft Download Center, zobacz artykuł "Jak do uzyskania wsparcia pliki z usługi Online firmy Microsoft" (Q119591) w bazie wiedzy Microsoft Knowledge Base). Artykuły bazy wiedzy Knowledge Base można znaleźć na dysku CD-ROM z biblioteki MSDN lub w https://support.microsoft.com/support.

Podstawowe techniki stosowane w ASYNDOWN jest ustalenie czasomierza w CDataPathProperty::OnDataAvailable aby wskazać, kiedy dane są dostępne.Po odebraniu wiadomości czasomierza aplikacji odczytuje w 128-bajtowe bloki danych i wypełnia formantu edycyjnego.Jeśli dane nie są dostępne, gdy obsługiwane czasomierza komunikat, czasomierz jest wyłączona.OnDataAvailableWłącza czasomierz, jeżeli później pojawia się więcej danych.

Wyświetlanie formantu na stronie sieci Web

Oto przykład tag obiektu i atrybutów do wstawiania formantu na stronie sieci 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>

Aktualizowanie istniejącego formantu OLE nowe funkcje formantu ActiveX

Jeśli formant OLE został utworzony za pomocą wersji programu Visual C++ przed 4.2, istnieją kroki, które można wykonać w celu zwiększenia wydajności i zwiększenia jego funkcjonalności.Szczegółowe omówienie tych zmian, zobacz formantów ActiveX: Optymalizacja.

Jeśli dodajesz wsparcie asynchronicznego właściwość z istniejącym formantem, trzeba będzie dodać właściwość stanu gotowości i ReadyStateChange zdarzenia samodzielnie.W Konstruktorze kontrolnej należy dodać:

m_lReadyState = READYSTATE_LOADING;

Jako kod jest pobierana przez wywołanie zaktualizuje stanu gotowości COleControl::InternalSetReadyState.Jednym miejscu można nazwać InternalSetReadyState jest z OnProgress zastępowania CDataPathProperty-klasy.

Następnie wykonaj kroki opisane w Tworzenie nowego formantu ActiveX.

Zobacz też

Koncepcje

MFC — zadania związane z programowaniem Internetu

MFC — podstawy programowania Internetu