Dodawanie strony właściwości (ALT — Samouczek, część 6)

Uwaga

Kreator dostawcy OLE DB ATL nie jest dostępny w programie Visual Studio 2019 i nowszych wersjach.

Strony właściwości są implementowane jako oddzielne obiekty COM, które umożliwiają ich udostępnianie w razie potrzeby. W tym kroku wykonasz następujące zadania, aby dodać stronę właściwości do kontrolki:

  • Tworzenie zasobu strony właściwości

  • Dodawanie kodu do tworzenia strony właściwości i zarządzania nią

  • Dodawanie strony właściwości do kontrolki

Tworzenie zasobu strony właściwości

Aby dodać stronę właściwości do kontrolki, użyj szablonu strony właściwości ATL.

Aby dodać stronę właściwości

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję Polygon.

  2. W menu skrótów kliknij pozycję Dodaj>nowy element.

  3. Z listy szablonów wybierz stronę właściwości ATL ATL>i kliknij przycisk Dodaj.

  4. Po wyświetleniu Kreatora strony właściwości ATL wprowadź PolyProp jako krótką nazwę.

  5. Kliknij pozycję Ciągi , aby otworzyć stronę Ciągi i wprowadź ciąg &Polygon jako tytuł.

    Tytuł strony właściwości to ciąg wyświetlany na karcie tej strony. Ciąg dokumentu jest opisem używanym przez ramkę właściwości do umieszczenia w wierszu stanu lub wskazówce narzędzia. Należy pamiętać, że standardowa ramka właściwości obecnie nie używa tego ciągu, więc można pozostawić ją z domyślną zawartością. Nie wygenerujesz pliku Pomocy w tej chwili, więc usuń wpis w tym polu tekstowym.

  6. Kliknij przycisk Zakończ, a obiekt strony właściwości zostanie utworzony.

Tworzone są następujące trzy pliki:

Plik opis
PolyProp.h Zawiera klasę CPolyPropjęzyka C++, która implementuje stronę właściwości.
PolyProp.cpp Zawiera plik PolyProp.h.
PolyProp.rgs Skrypt rejestru, który rejestruje obiekt strony właściwości.

Wprowadzono również następujące zmiany kodu:

  • Nowa strona właściwości jest dodawana do mapy wprowadzania obiektów w pliku Polygon.cpp.

  • Klasa PolyProp jest dodawana do pliku Polygon.idl.

  • Nowy plik skryptu rejestru PolyProp.rgs jest dodawany do zasobu projektu.

  • Szablon okna dialogowego jest dodawany do zasobu projektu dla strony właściwości.

  • Określone ciągi właściwości są dodawane do tabeli ciągów zasobów.

Teraz dodaj pola, które mają być wyświetlane na stronie właściwości.

Aby dodać pola do strony właściwości

  1. W Eksplorator rozwiązań kliknij dwukrotnie plik zasobu Polygon.rc. Spowoduje to otwarcie widoku zasobu.

  2. W widoku zasobu rozwiń Dialog węzeł i kliknij dwukrotnie pozycję IDD_POLYPROP. Zwróć uwagę, że wyświetlone okno dialogowe jest puste z wyjątkiem etykiety, która informuje o wstawieniu kontrolek tutaj.

  3. Wybierz tę etykietę i zmień ją, aby ją odczytać Sides: , zmieniając tekst Podpis w oknie Właściwości .

  4. Zmień rozmiar pola etykiety, tak aby pasował do rozmiaru tekstu.

  5. Przeciągnij kontrolkę Edytuj z przybornika po prawej stronie etykiety.

  6. Na koniec zmień identyfikator kontrolki IDC_SIDES edycji na użycie okna Właściwości .

Spowoduje to ukończenie procesu tworzenia zasobu strony właściwości.

Dodawanie kodu do tworzenia strony właściwości i zarządzania nią

Po utworzeniu zasobu strony właściwości należy napisać kod implementacji.

Najpierw włącz klasę CPolyProp , aby ustawić liczbę boków w obiekcie po naciśnięciu przycisku Zastosuj .

Aby zmodyfikować funkcję Apply, aby ustawić liczbę stron

  1. Zastąp Apply funkcję PolyProp.h następującym kodem:

    STDMETHOD(Apply)(void)
    {
       USES_CONVERSION;
       ATLTRACE(_T("CPolyProp::Apply\n"));
       for (UINT i = 0; i < m_nObjects; i++)
       {
          CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);
          short nSides = (short)GetDlgItemInt(IDC_SIDES);
          if FAILED(pPoly->put_Sides(nSides))
          {
             CComPtr<IErrorInfo> pError;
             CComBSTR strError;
             GetErrorInfo(0, &pError);
             pError->GetDescription(&strError);
             MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
             return E_FAIL;
          }
       }
       m_bDirty = FALSE;
       return S_OK;
    }
    

Strona właściwości może mieć więcej niż jednego klienta dołączonego do niego w danym momencie, więc Apply funkcja krąży i wywołuje put_Sides na każdym kliencie wartość pobraną z pola edycji. Używasz klasy CComQIPtr, która wykonuje QueryInterface element na każdym obiekcie w celu uzyskania IPolyCtl interfejsu z interfejsu IUnknown (przechowywanego w tablicym_ppUnk).

Kod sprawdza teraz, czy ustawienie Sides właściwości rzeczywiście zadziałało. W przypadku niepowodzenia kod wyświetla pole komunikatu z wyświetlonymi szczegółami błędu z interfejsu IErrorInfo . Zazwyczaj kontener pyta obiekt o ISupportErrorInfo interfejs i wywołuje InterfaceSupportsErrorInfo go jako pierwszy, aby określić, czy obiekt obsługuje ustawianie informacji o błędzie. Możesz pominąć to zadanie.

Narzędzie CComPtr pomaga automatycznie obsługiwać zliczanie odwołań, dlatego nie trzeba wywoływać Release interfejsu. CComBSTR pomaga w przetwarzaniu BSTR, więc nie trzeba wykonywać ostatniego SysFreeString wywołania. Należy również użyć jednej z różnych klas konwersji ciągów, aby w razie potrzeby przekonwertować ciąg BSTR (dlatego makro USES_CONVERSION znajduje się na początku funkcji).

Należy również ustawić flagę zanieczyszczonej strony właściwości, aby wskazać, że przycisk Zastosuj powinien być włączony. Dzieje się tak, gdy użytkownik zmienia wartość w polu edycji Strony .

Aby obsłużyć przycisk Zastosuj

  1. W widoku klasy kliknij prawym przyciskiem myszy CPolyProp i kliknij polecenie Właściwości w menu skrótów.

  2. W oknie Właściwości kliknij ikonę Zdarzenia.

  3. IDC_SIDES Rozwiń węzeł na liście zdarzeń.

  4. Wybierz pozycję EN_CHANGE, a następnie z menu rozwijanego po prawej stronie kliknij pozycję <Dodaj> OnEnChangeSides. Deklaracja OnEnChangeSides programu obsługi zostanie dodana do pliku Polyprop.h, a implementacja programu obsługi do programu Polyprop.cpp.

Następnie zmodyfikujesz procedurę obsługi.

Aby zmodyfikować metodę OnEnChangeSides

  1. Dodaj następujący kod w pliku Polyprop.cpp do OnEnChangeSides metody (usunięcie dowolnego kodu wprowadzonego przez kreatora):

    LRESULT CPolyProp::OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, 
       HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
       SetDirty(TRUE);
    
       return 0;
    }
    

OnEnChangeSides zostanie wywołana po WM_COMMAND wysłaniu komunikatu EN_CHANGE z powiadomieniem dla kontrolki IDC_SIDES . OnEnChangeSides następnie wywołuje SetDirty i przekazuje wartość TRUE, aby wskazać, że strona właściwości jest teraz zanieczyszczona, a przycisk Zastosuj powinien być włączony.

Dodawanie strony właściwości do kontrolki

Szablon strony właściwości ATL i kreator nie dodają strony właściwości do kontrolki automatycznie, ponieważ w projekcie może istnieć wiele kontrolek. Musisz dodać wpis do mapy właściwości kontrolki.

Aby dodać stronę właściwości

  1. Otwórz plik PolyCtl.h i dodaj następujące wiersze do mapy właściwości:

    PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
    PROP_PAGE(CLSID_PolyProp)
    

Mapa właściwości kontrolki wygląda teraz następująco:

BEGIN_PROP_MAP(CPolyCtl)
   PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
   PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
#ifndef _WIN32_WCE
   PROP_ENTRY_TYPE("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UI4)
#endif
   PROP_ENTRY_TYPE("Sides", 1, CLSID_PolyProp, VT_INT)
   PROP_PAGE(CLSID_PolyProp)
   // Example entries
   // PROP_ENTRY("Property Description", dispid, clsid)
   // PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

Można było dodać PROP_PAGE makro ze identyfikatorem CLSID strony właściwości, ale jeśli używasz PROP_ENTRY makra, jak pokazano, Sides wartość właściwości jest również zapisywana podczas zapisywania kontrolki.

Trzy parametry makra są opisem właściwości, identyfikatorem DISPID właściwości i identyfikatorem CLSID strony właściwości, która ma na nim właściwość. Jest to przydatne, jeśli na przykład załadujesz kontrolkę do języka Visual Basic i ustawisz liczbę stron w czasie projektowania. Ponieważ liczba stron jest zapisywana, po ponownym załadowaniu projektu Visual Basic zostanie przywrócona liczba stron.

Kompilowanie i testowanie kontrolki

Teraz skompiluj kontrolkę i wstaw ją do kontenera testów kontrolek ActiveX. W kontenerze testowym w menu Edycja kliknij pozycję Obiekt klasy PolyCtl. Zostanie wyświetlona strona właściwości z dodanymi informacjami.

Przycisk Zastosuj jest początkowo wyłączony. Zacznij wpisywać wartość w polu Boki , a przycisk Zastosuj zostanie włączony. Po zakończeniu wprowadzania wartości kliknij przycisk Zastosuj . Zostanie zmieniony ekran kontrolki, a przycisk Zastosuj zostanie ponownie wyłączony. Spróbuj wprowadzić nieprawidłową wartość. Zostanie wyświetlone pole komunikatu zawierające opis błędu ustawionego put_Sides z funkcji.

Następnie na stronie sieci Web zostanie umieszczona kontrolka.

Powrót do kroku 5 | do kroku 7

Zobacz też

Samouczek