Udostępnij za pośrednictwem


Kontrolki ActiveX MFC: dodawanie właściwości niestandardowych

Właściwości niestandardowe różnią się od właściwości magazynowych w tym, że właściwości niestandardowe nie są jeszcze implementowane przez klasę COleControl . Właściwość niestandardowa służy do uwidaczniania określonego stanu lub wyglądu kontrolki ActiveX programisty za pomocą kontrolki .

W tym artykule opisano sposób dodawania właściwości niestandardowej do kontrolki ActiveX przy użyciu Kreatora dodawania właściwości i wyjaśniono wynikowe modyfikacje kodu. Tematy obejmują:

Właściwości niestandardowe są dostępne w czterech odmianach implementacji: Zmienna składowa, Zmienna składowa z powiadomieniem, Metody Get/Set i Sparametryzowane.

  • Implementacja zmiennej składowej

    Ta implementacja reprezentuje stan właściwości jako zmienną składową w klasie formantu. Użyj implementacji zmiennej składowej, jeśli nie jest ważne, aby wiedzieć, kiedy wartość właściwości się zmienia. Z trzech typów ta implementacja tworzy najmniejszą ilość kodu obsługi dla właściwości. Makro wpisu mapy wysyłania dla implementacji zmiennej składowej jest DISP_PROPERTY.

  • Zmienna składowa z implementacją powiadomień

    Ta implementacja składa się ze zmiennej składowej i funkcji powiadomienia utworzonej przez Kreatora dodawania właściwości. Funkcja powiadamiania jest automatycznie wywoływana przez strukturę po zmianie wartości właściwości. Użyj zmiennej składowej z implementacją powiadomień, jeśli musisz otrzymywać powiadomienia po zmianie wartości właściwości. Ta implementacja wymaga więcej czasu, ponieważ wymaga wywołania funkcji. Makro wpisu mapy wysyłania dla tej implementacji jest DISP_PROPERTY_NOTIFY.

  • Implementacja metod Get/Set

    Ta implementacja składa się z pary funkcji składowych w klasie sterowania. Implementacja Get/Set Methods automatycznie wywołuje funkcję Get member, gdy użytkownik kontrolki żąda bieżącej wartości właściwości i funkcji Set member, gdy użytkownik kontrolki zażąda zmiany właściwości. Użyj tej implementacji, jeśli musisz obliczyć wartość właściwości w czasie wykonywania, zweryfikować wartość przekazaną przez użytkownika kontrolki przed zmianą właściwości rzeczywistej lub zaimplementować typ właściwości tylko do odczytu lub zapisu. Makro wpisu mapy wysyłania dla tej implementacji jest DISP_PROPERTY_EX. W poniższej sekcji Używanie Kreatora dodawania właściwości do dodawania właściwości niestandardowej używa właściwości niestandardowej CircleOffset do zademonstrowania tej implementacji.

  • Implementacja sparametryzowana

    Implementacja sparametryzowana jest obsługiwana przez Kreatora dodawania właściwości. Właściwość sparametryzowana (czasami nazywana tablicą właściwości) może służyć do uzyskiwania dostępu do zestawu wartości za pośrednictwem jednej właściwości kontrolki. Makro wpisu mapy wysyłania dla tej implementacji jest DISP_PROPERTY_PARAM. Aby uzyskać więcej informacji na temat implementowania tego typu, zobacz Implementowanie właściwości sparametryzowanej w artykule Kontrolki ActiveX: Tematy zaawansowane.

Dodawanie właściwości za pomocą Kreatora dodawania właściwości w celu dodania właściwości niestandardowej

Poniższa procedura przedstawia dodawanie właściwości niestandardowej CircleOffset, która używa implementacji metod Get/Set. Właściwość niestandardowa CircleOffset umożliwia użytkownikowi kontrolki przesunięcie okręgu z środka prostokąta ograniczenia kontrolki. Procedura dodawania właściwości niestandardowych z implementacją inną niż Metody Get/Set jest bardzo podobna.

Tej samej procedury można również użyć do dodawania innych właściwości niestandardowych. Zastąp niestandardową nazwę właściwości CircleOffset i parametrami.

Aby dodać właściwość niestandardową CircleOffset za pomocą Kreatora dodawania właściwości

  1. Załaduj projekt kontrolki.

  2. W widoku klasy rozwiń węzeł biblioteki kontrolki.

  3. Kliknij prawym przyciskiem myszy węzeł interfejsu kontrolki (drugi węzeł biblioteki), aby otworzyć menu skrótów.

  4. W menu skrótów kliknij pozycję Dodaj , a następnie kliknij pozycję Dodaj właściwość.

    Spowoduje to otwarcie Kreatora dodawania właściwości.

  5. W polu Nazwa właściwości wpisz CircleOffset.

  6. W polu Typ implementacji kliknij pozycję Pobierz/Ustaw metody.

  7. W polu Typ właściwości wybierz pozycję short.

  8. Wpisz unikatowe nazwy funkcji Get i Ustaw lub zaakceptuj nazwy domyślne.

  9. Kliknij przycisk Finish (Zakończ).

Dodawanie zmian kreatora właściwości dla właściwości niestandardowych

Po dodaniu właściwości niestandardowej CircleOffset Kreator dodawania właściwości wprowadza zmiany w nagłówku (. H) i implementacja (. Pliki CPP klasy kontrolnej.

Następujące wiersze są dodawane do elementu . Plik H do deklarowania dwóch funkcji o nazwie GetCircleOffset i SetCircleOffset:

SHORT GetCircleOffset(void);
void SetCircleOffset(SHORT newVal);

Następujący wiersz jest dodawany do kontrolki . Plik IDL:

[id(2), helpstring("property CircleOffset")] SHORT CircleOffset;
[id(3), helpstring("property MyProperty")] SHORT MyProperty;

Ten wiersz przypisuje właściwość CircleOffset określony numer identyfikatora pobrany z pozycji metody na liście metod i właściwości Kreatora dodawania właściwości.

Ponadto do mapy wysyłania jest dodawany następujący wiersz (w pliku . Plik CPP klasy formantu) w celu zamapowania właściwości CircleOffset na dwie funkcje obsługi formantu:

DISP_PROPERTY_EX_ID(CMyAxUICtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)

Na koniec implementacje GetCircleOffset funkcji i SetCircleOffset są dodawane na końcu kontrolki . Plik CPP. W większości przypadków zmodyfikujesz funkcję Get, aby zwrócić wartość właściwości. Funkcja Set będzie zwykle zawierać kod, który powinien zostać wykonany przed zmianą właściwości lub po jej zmianie.

void CMyAxUICtrl::SetCircleOffset(SHORT /*newVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Zwróć uwagę, że Kreator dodawania właściwości automatycznie dodaje wywołanie funkcji SetModifiedFlag do treści funkcji Set. Wywołanie tej funkcji oznacza kontrolkę jako zmodyfikowaną. Jeśli kontrolka została zmodyfikowana, jej nowy stan zostanie zapisany po zapisaniu kontenera. Ta funkcja powinna być wywoływana za każdym razem, gdy właściwość zapisana w ramach stanu trwałego kontrolki zmienia wartość.

Zobacz też

Kontrolki ActiveX MFC
Kontrolki ActiveX MFC: właściwości
Kontrolki ActiveX MFC: metody
Klasa COleControl