Etap 6: Dodawanie strony właściwości

Strony właściwości są implementowane jako oddzielne obiekty COM, które pozwalają strony właściwości ma być udostępniony, jeżeli jest to wymagane. Aby dodać stronę właściwości formantu można użyć Kreatora obiektu ATL.

Uruchom Kreatora obiektu ATL i zaznacz formanty jako kategorii po lewej stronie. Wybierz Właściwości strony po prawej stronie, a następnie kliknij przycisk dalej.

Otrzymasz ponownie okno dialogowe umożliwiające wprowadź nazwę nowego obiektu. Wywołanie obiektu PolyProp i wprowadź nazwę w polu edycji Krótką nazwę.

Należy zauważyć, że pole edycji interfejsu jest wyszarzona. Jest to spowodowane strony właściwości nie wymaga niestandardowego interfejsu.

Kliknij k&artę ciągi znaków , aby ustawić tytuł strony właściwości. Tytuł strony właściwości jest ciągiem, który pojawia się na karcie dla tej strony. Wpisz amp;Wielokąt jako tytuł. Doc ciąg jest opis, który klatki właściwości używa umieścić w etykietce narzędzia lub wiersz stanu. Należy zauważyć, że ramki standardowych właściwości nie jest aktualnie używany ten ciąg, ale można ustawić mimo to. Nie zamierzasz generowania Helpfile w chwili obecnej, aby wymazać wpis w tym polu tekstowym. Kliknij przycisk OK , a właściwość zostanie utworzony obiekt na stronie.

Tworzone są następujące trzy pliki:

Plik Opis
PolyProp.h Zawiera klasa C++ CPolyProp , który implementuje strony właściwości.
PolyProp.cpp Zawiera plik PolyProp.h.
PolyProp.rgs Skrypt rejestru, który rejestruje obiekt na stronie właściwości.

Również zostaną wprowadzone następujące zmiany kodu:

Teraz dodaj pola, które mają być wyświetlane na stronie właściwości. Należy zauważyć, że w Polygon.rc okno dialogowe jest pustym etykiety, która informuje, aby wstawić formanty tutaj. Usuń tę etykietę i dodać jedną, która zawiera tekst "stronach:". Obok etykiety dodać pole edycji i nadaj IdentyfikatoremIDC_SIDES.

Obejmują Polygon.h u góry pliku PolyProp.h:

# i&nclude "Polygon.h"nbsp; / / Definicja IPolyCtl

Teraz włączyć CPolyProp klasy, aby ustawić liczbę boków obiektu po naciśnięciu przycisku Zastosuj . Zmiana Apply działać w PolyProp.h w następujący sposób.

STDMETHOD(apply)(void)
{
   USES_CONVERSION;
   ATLTRACE(_T("CPolyProp::Apply\n"));
   dla (UINT I = 0; i lt; m_nObjects; i ++)
   {
      CComQIPtr < IPolyCtl & IID_IPolyCtl > pPoly(m_ppUnk[i]);
      krótkie nSides = (short)GetDlgItemInt(IDC_SIDES);
      Jeśli nie powiodło się (pPoly - > put_Sides(nSides))
      {
         CComPtr <IErrorInfo> pError;
         CComBSTR strError;
         GetErrorInfo (0 & pError);
         pError - > GetDescription(&strError);
         MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
         Zwraca E_FAIL;
      }
   }
   m_bDirty = FALSE;
   Zwraca wartość S_OK;
}

Strona właściwości może mieć więcej niż jeden klient dołączone do niego naraz, więc Apply funkcji loopy wokół i wzywa put_Sides na każdego klienta z wartością źródło pola edycji. Używasz klasę CComQIPtr , która wykonuje QueryInterface dla każdego obiektu do uzyskania IPolyCtl interfejs IUnknown (przechowywane w m_ppUnk tablicy).

Kod sprawdza teraz, że ustawienie właściwości strony faktycznie przepracowanych. Jeśli to się nie powiedzie, kod wyświetla okno komunikatu Wyświetlanie szczegóły błędu z interfejsu IErrorInfo . Zazwyczaj kontener zwraca obiekt dla interfejsu ISupportErrorInfo i wywołuje InterfaceSupportsErrorInfo po pierwsze, ustalenie, czy obiekt obsługuje ustawienie błąd informacji. Ale ponieważ pokazując, może zrzec tego wyboru.

CComPtr pomaga przez automatycznie obsługi odniesienia liczenia, więc nie musisz wywołać dopuszczenia na interfejsie. CComBSTR pomoże Ci z przetwarzaniem BSTR , dzięki czemu nie trzeba wykonywać ostatecznym zaproszeniu SysFreeString . Również użyjesz jednego z różnych klas konwersji ciągów, więc można przekonwertować BSTR , jeśli to konieczne, (to jest dlaczego makro USES_CONVERSION możemy dodać na początku funkcji).

Ponadto musi ustawić flagę dirty Strona właściwości do wskazania, że powinien być włączony przycisk Zastosuj . Dzieje się tak, gdy użytkownik zmieni wartości w polu edycji strony. Kliknij prawym przyciskiem myszy klasę strony właściwości (CPolyProp) w ClassView , a następnie wybierz Dodaj Windows Message Handler... z menu.nbsp skrótów; Wybierz IDC_SIDES w polu obiekt, a następnie dodać komunikat E&N_CHANGE.

Teraz dodaj poniższy kod w Polyprop.h do OnChangeSides funkcji (usuwanie wszelkich kodu Kreator tam umieszczone):

 LRESULT OnCh&angeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
   SetDirty(TRUE);
   zwrócona wartość 0;
}

OnChangeSidesbędzie wywoływany, gdy wysyłana jest wiadomość WM_COMMAND z powiadomienie EN_CHANGE dla IDC_SIDES formantu. OnChangeSides następnie wywołuje SetDirty i przechodzi do Prawda aby wskazać stronę właściwości teraz jest zanieczyszczony i powinien być włączony przycisk Zastosuj.

Teraz dodaj stronę właściwości dla formantu. Kreator obiektu ATL nie robi to automatycznie, ponieważ może istnieć wiele formantów w projekcie. Otwórz PolyCtl.h i dodaj wiersz do mapy właściwości:

   PROP_ENTRY ("strony", 1, CLSID_PolyProp)

Mapa właściwości formantu wygląda teraz, to:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
   PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
   PROP_ENTRY ("strony", 1, CLSID_PolyProp)
   / / Przykładowe wpisy
   / / PROP_ENTRY ("właściwości opis", dispid, identyfikator clsid)
   / / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Być może dodano PROP_PAGE makro o identyfikatorze CLSID strony właściwości, ale jeśli używasz PROP_ENTRY makro jak wykazano, boki, wartość właściwości jest także zapisywane podczas kontrola jest zapisywany. Trzy parametry do makra są opis właściwości, DISPID właściwość i CLSID strony właściwości, która ma właściwość na nim. Jest to przydatne, jeśli, na przykład wczytać formant do języka Visual Basic i ustawić liczbę boków w czasie projektowania. Ponieważ liczba boków są zapisywane, podczas ponownego załadowania projektu języka Visual Basic, który zostanie przywrócone liczbę boków.

Teraz tworzyć tego formantu i włóż ją do Kontenera badania formantu ActiveX. Następnie Badania kontenera, w menu Edycja kliknij Obiekt klasy PolyCtl. Zostanie wyświetlona strona właściwości; wybrana karta wielokąt.

Przycisk Zastosuj początkowo jest wyłączony. Początku wpisując wartość w boków polu edycji i będzie stają się włączony przycisk Zastosuj. Po zakończeniu, wprowadzając wartość, kliknij przycisk Zastosuj . Zmiany wyświetlania formantu i przycisk Zastosuj ponownie jest wyłączone. Spróbuj wprowadzić nieprawidłową wartość i powinny być widoczne w oknie komunikatu zawierającego opis błędu, który można ustawić z put_Sides funkcji.

Następnie przykleić formantu na stronie sieci Web.

Wróć do kroku 5 |nbsp; Do kroku 7

Index