Formanty ActiveX w Internecie
Formanty ActiveX są zaktualizowanej wersji specyfikacji formantu OLE.Formanty są podstawowym architektury dla rozwoju składniki programowalny oprogramowania, które mogą być używane w różnych pojemnikach różnych, łącznie z przeglądarki sieci Web obsługującej COM w Internecie.Dowolny formant ActiveX może być formantu Internet i można dodać jego funkcjonalności do aktywnego dokumentu lub 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że również w jakimkolwiek pojemniku, tak długo, jak formant obsługuje interfejsy wymagane przez tego kontenera.
Formanty ActiveX mają kilka zalet, w tym:
Interfejsy mniej wymagane niż poprzednie formanty OLE.
Umiejętność bez okien i aktywny zawsze w miejscu.
W celu zapewnienia formantu ActiveX formant musi:
Obsługa IUnknown interfejsu.
Być obiektu COM.
Wywóz DLLRegisterServer i DLLUnRegisterServer.
Obsługiwać dodatkowe interfejsy dla funkcji.
Dokonanie istniejące formanty przyjazne dla Internetu
Projektowania formantu, który będzie działać w środowisku sieci Internet wymaga uwzględnienia dla względnie małe szybkości transmisji w sieci Internet.Można użyć istniejących formantów; Jednak istnieją kroki, które należy podjąć, aby zmniejszyć rozmiar kodu i aby Twoje właściwości formantu, Pobierz asynchronicznie.
Aby zwiększyć wydajność formanty, poniższe wskazówki na zagadnienia dotyczące wydajności:
Wdrożenie technik opisanych w artykule formantów ActiveX: Optymalizacja.
Należy rozważyć, jaki jest utworzyć wystąpienia formantu.
Być asynchronicznego; nie posiadać inne programy.
Pobieranie danych w małych bloków.
Podczas pobierania dużych strumieni, takich jak bitmapy lub dane wideo, dostęp do danych formantu asynchronicznie we współpracy z kontenera.Pobieranie danych w sposób przyrostowy lub stopniowe, praca wspólnie z innymi formantami, które mogą również pobieranie danych.Kod można również być asynchronicznie pobierania.
Pobierz kod i właściwości w tle.
Stają się interfejs użytkownika aktywne tak szybko jak to możliwe.
Należy rozważyć sposób trwałe dane są przechowywane, zarówno właściwości, jak i dużych danych BLOBs (np. danych obrazu lub wideo mapa bitowa).
Formanty z znacznych środków trwałych danych, takich jak duże mapy bitowe lub pliki AVI, wymagają szczególną uwagę na metodę pobierania.Dokument lub stronę można jak najszybciej stają się widoczne i umożliwia użytkownikowi interakcję ze stroną podczas kontroli pobierania danych w tle.
Pisać skuteczne procedury, aby utrzymywać rozmiar kodu i w czasie wykonywania.
Małych przycisków i etykiet formantów, tylko kilka bajtów danych trwałych są odpowiednie do wykorzystania w środowisku Internetu i pracy oraz wewnątrz przeglądarki.
Należy rozważyć postępu jest przekazywana do kontenera.
Powiadamia kontener postępu w asynchroniczne pobieranie, w tym, kiedy użytkownik może rozpocząć się do operowania na stronę, a po zakończeniu pobierania.Kontener można wyświetlić postęp (na przykład wykonano %) do użytkownika.
Należy rozważyć, jak formanty są zarejestrowane na komputerze klienckim.
Tworzenie nowego formantu ActiveX
Podczas tworzenia nowego formantu za pomocą Kreatora aplikacji, można włączyć obsługę asynchronicznego monikerów, jak również innych optymalizacje.Aby dodać obsługę asynchronicznie pobierania właściwości formantu, wykonaj następujące kroki:
Do tworzenia projektu przy użyciu Kreatora formant ActiveX MFC
Kliknij New na pliku menu.
Wybierz Kreatora formantów ActiveX MFC z Visual C++ projektów oraz nazwę projektu.
Na Ustawienia sterowania stronę, wybierz opcję asynchronicznie ładuje właściwości.Wybranie tej opcji skonfigurować właściwości stanie gotowości i zdarzenie ready stan zmienił się.
Można także wybrać inne optymalizacje, takich jak bez okien aktywacji, który jest opisany w formantów ActiveX: Optymalizacja.
Wybierz Zakończ do utworzenia projektu.
Aby utworzyć klasę pochodną CDataPathProperty
Tworzenie klasy pochodzącej od CDataPathProperty.
W każdym z plików źródłowych, które zawiera plik nagłówka formantu dodać plik nagłówka dla tej klasy przed nim.
W tej klasie zastąpić OnDataAvailable.Funkcja ta jest wywoływana, gdy dostępne są dane.Danych stanie się dostępny, można obsłużyć dowolny sposób można wybrać, na przykład stopniowo udostępnienie go.
Poniższy fragment kodu jest prosty przykład stopniowe wyświetlanie danych w formancie edycji.Uwaga Użycie flagi BSCF_FIRSTDATANOTIFICATION 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 musi zawierać AFXCMN.H, aby użyć CListCtrl klasy.
Po formantu 's ogólny stan zmienia (na przykład z załadunku do zainicjowany lub użytkownika interakcyjnego), wywołanie COleControl::InternalSetReadyState.Jeśli formant ma właściwość ścieżka danych tylko jednego, można dodać kod w BSCF_LASTDATANOTIFICATION do powiadamia kontener o zakończeniu pobierania.Na przykład:
if (bscfFlag & BSCF_LASTDATANOTIFICATION) { GetControl()->InternalSetReadyState(READYSTATE_COMPLETE); }
Zastąpić OnProgress.W OnProgress, są przekazywane numer, pokazujący maksymalny zasięg i jest liczba pokazujące, jak daleko wzdłuż pobierania bieżącej.Numery te można użyć do wyświetlania stanu, takich jak procent wykonania do użytkownika.
Następnej procedury dodaje właściwość do formantu Aby użyć klasy pochodzące tylko.
Aby dodać właściwość
W Widoku klasy, kliknij prawym przyciskiem myszy interfejs pod spodem węzeł Biblioteka i wybierz Dodaj, następnie Dodaj właściwość.Spowoduje to uruchomienie Kreatora dodawania właściwości.
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.
Kliknij Zakończ.
Zadeklarować zmienną z programu CDataPathProperty-uzyskane klasy do swojej klasy formantu ActiveX.
CMyDataPathProperty EditControlText;
Wdrożenie Get i Set metody.Dla uzyskać, zwracać 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(); }
W DoPropExchange, należy dodać następujący wiersz:
PX_DataPath(pPX, _T("DataPath"), EditControlText);
Zastąpić ResetData do właściwości, aby zresetować jego formantu przez dodanie tego wiersza powiadomienia:
EditControlText.ResetData();
Decydowania, czy pochodzi od CDataPathProperty lub CCachedDataPathProperty
Poprzedni przykład opisuje kroki w wynikających z właściwości użytkownika formantu z CDataPathProperty.Jest dobrym rozwiązaniem, jeśli pobierasz dane w czasie rzeczywistym, często zmienia i dla których nie trzeba przechowywać wszystkie dane, ale tylko bieżącą wartość.Przykładem jest formant giełdowe.
Może również wynikać z CCachedDataPathProperty.W tym przypadku pobrane dane są buforowane w pliku pamięci.Jest dobrym rozwiązaniem, jeśli trzeba zachować wczytanych danych — na przykład formant, który renderuje stopniowo mapy bitowej.W takim przypadku klasa ma zmienną zawierających dane:
CMemFile m_Cache;
W klasie formantu ActiveX, można użyć tego pliku mapowanego pamięci w OnDraw do wyświetlenia danych.W formancie ActiveX w CCachedDataPathProperty-klasy, zastąpić funkcji składowej OnDataAvailable i unieważnia formantu, po wywołaniu implementacji 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 za pośrednictwem sieci powinno być wykonywane asynchronicznie.Zaletą zaawansowana tak jest duża ilość danych jest przenoszona lub jeśli połączenie jest powolne, proces pobierania nie będzie blokował innych procesów na komputerze klienckim.
Asynchroniczne monikerów umożliwiają asynchronicznie pobierania danych za pośrednictwem sieci.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 asynchronicznie nosi odczytu pliku 1 K, odczytu nie są blokowane, ale zwraca z aktualnie dostępne bajty 10.
Można zaimplementować asynchronicznego monikerów za pomocą CAsyncMonikerFile klasy.Jednakże można używać formantów ActiveX CDataPathProperty klasy, która wywodzi się z CAsyncMonikerFile, aby wspomóc właściwości formantu asynchronicznego.
Próbki ASYNDOWN demonstruje, jak skonfigurować asynchronicznego pętli, Odczyt danych za pomocą czasomierzy.ASYNDOWN jest opisana szczegółowo w artykule bazy wiedzy Knowledge Base "HOWTO: AsyncDown demonstruje asynchronicznego wczytywania danych" (Q177244) i jest dostępny do pobrania w Centrum pobierania firmy Microsoft.(Aby uzyskać więcej informacji dotyczących pobierania plików z witryny Centrum pobierania firmy Microsoft, zobacz artykuł "Jak do uzyskania wsparcia pliki z Online usługi Microsoft" (Q119591) w bazie wiedzy Microsoft Knowledge Base). Artykuły bazy wiedzy Knowledge Base można znaleźć MSDN Library CD-ROM lub na https://support.microsoft.com/support.
Podstawowe techniki używane w ASYNDOWN jest ustawiony CDataPathProperty::OnDataAvailable , aby wskazać, kiedy dane są dostępne.Po otrzymaniu wiadomości czasomierza aplikacji odczytuje w blokach 128 bajtów danych i wypełnia pole edycji.Jeśli dane nie są dostępne, gdy wiadomość timer jest obsługiwany, czasomierz jest wyłączona.OnDataAvailableWłącza timer, jeśli później nadejścia więcej danych.
Wyświetlanie formantu na stronie sieci Web
Oto przykład tag obiektu i atrybuty 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 korzystanie z nowych funkcji formantu ActiveX
Jeśli formantu OLE został utworzony za pomocą wersji programu Visual C++ przed do ppkt 4.2, istnieją kroki, które można wykonać w celu zwiększenia wydajności i zwiększenia jego funkcjonalność.Szczegółowe omówienie tych zmian, zobacz formantów ActiveX: Optymalizacja.
Jeśli dodajesz wsparcia asynchronicznego właściwości formantu, musisz dodać właściwość stanie gotowości i ReadyStateChange zdarzenia samodzielnie.W konstruktorze dla formantu należy dodać:
m_lReadyState = READYSTATE_LOADING;
W stanie gotowości zostaną zaktualizowane w miarę pobierania kodu, wywołując COleControl::InternalSetReadyState.Jednym miejscu może wywołać InternalSetReadyState z OnProgress zastąpić z CDataPathProperty-klasy.
Następnie wykonaj kroki w Tworzenie nowego formantu ActiveX.