Udostępnij za pośrednictwem


Formanty MFC ActiveX: dodawanie metod niestandardowych

Metody niestandardowe różnią się od metod magazynowych, które nie są jeszcze implementowane przez COleControlprogram . Musisz podać implementację dla każdej metody niestandardowej dodawanej do kontrolki.

Ważne

ActiveX to starsza technologia, która nie powinna być używana do tworzenia nowych rozwiązań. Aby uzyskać więcej informacji na temat nowoczesnych technologii zastępujących activex, zobacz Kontrolki ActiveX.

Użytkownik kontrolki ActiveX może w dowolnym momencie wywołać metodę niestandardową w celu wykonywania akcji specyficznych dla kontrolek. Wpis mapy wysyłania dla metod niestandardowych jest DISP_FUNCTION formularza.

Dodawanie metody niestandardowej za pomocą Kreatora dodawania metody

Poniższa procedura przedstawia dodawanie metody niestandardowej PtInCircle do szkieletowego kodu kontrolki ActiveX. PtInCircle określa, czy współrzędne przekazywane do kontrolki znajdują się wewnątrz lub na zewnątrz okręgu. Tej samej procedury można również użyć do dodawania innych metod niestandardowych. Zastąp niestandardową nazwę metody i jej parametry nazwą i parametrami metody PtInCircle.

Uwaga

W tym przykładzie użyto InCircle funkcji z artykułu Zdarzenia. Aby uzyskać więcej informacji na temat tej funkcji, zobacz artykuł Kontrolki ActiveX MFC: dodawanie zdarzeń niestandardowych do kontrolki ActiveX.

Aby dodać metodę niestandardową PtInCircle przy użyciu Kreatora dodawania metody

  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 metodę.

    Spowoduje to otwarcie Kreatora dodawania metody.

  5. W polu Nazwa metody wpisz PtInCircle.

  6. W polu Nazwa wewnętrzna wpisz nazwę funkcji wewnętrznej metody lub użyj wartości domyślnej (w tym przypadku PtInCircle).

  7. W polu Typ zwracany kliknij VARIANT_BOOL dla zwracanego typu metody.

  8. Używając kontrolek Typ parametru i Nazwa parametru, dodaj parametr o nazwie xCoord (typ OLE_XPOS_PIXELS).

  9. Używając kontrolek Typ parametru i Nazwa parametru, dodaj parametr o nazwie yCoord (typ OLE_YPOS_PIXELS).

  10. Kliknij przycisk Finish (Zakończ).

Dodawanie zmian kreatora metod dla metod niestandardowych

Po dodaniu metody niestandardowej Kreator dodawania metody wprowadza pewne zmiany w nagłówku klasy kontrolnej (. H) i implementacja (. Pliki CPP). Następujący wiersz jest dodawany do deklaracji mapy wysyłania w nagłówku klasy kontrolnej (. Plik H):

VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Ten kod deklaruje procedurę obsługi metody dispatch o nazwie PtInCircle. Ta funkcja może być wywoływana przez użytkownika sterującego przy użyciu nazwy PtInCirclezewnętrznej .

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

[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Ten wiersz przypisuje metodę PtInCircle określony numer identyfikatora, pozycję metody na liście Metod i właściwości Kreatora dodawania metody. Ponieważ Kreator dodawania metody został użyty do dodania metody niestandardowej, wpis został dodany automatycznie do projektu . Plik IDL.

Ponadto następujący wiersz znajduje się w implementacji (. Plik CPP) klasy kontrolnej jest dodawany do mapy wysyłania kontrolki:

DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Makro DISP_FUNCTION mapuje metodę na funkcję PtInCircle obsługi formantu, PtInCircledeklaruje typ zwracany jako VARIANT_BOOL i deklaruje dwa parametry typu VTS_XPOS_PIXELS i VTS_YPOSPIXELS , które mają zostać przekazane do PtInCircle.

Na koniec Kreator dodawania metody dodaje funkcję CSampleCtrl::PtInCircle wycinkową do dołu implementacji kontrolki (. Plik CPP). Aby PtInCircle można było działać zgodnie z wcześniejszym opisem, należy go zmodyfikować w następujący sposób:

VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CPoint point(xCoord, yCoord);
   return InCircle(point);
}

Zobacz też

Kontrolki ActiveX MFC
Widok klasy i Przeglądarka obiektów, ikony