Formanty ActiveX MFC: Dodawanie niestandardowych zdarzeń
Niestandardowych zdarzeń różnią się od podstawowego zdarzenia, nie są one automatycznie wywoływane przez klasę COleControl.Niestandardowe zdarzenie rozpoznaje pewnej akcji, określone przez autora formantu jako wydarzenie.Wpisy mapy zdarzenia dla zdarzenia niestandardowe są reprezentowane przez EVENT_CUSTOM makro.Sekcję implementuje zdarzenia niestandardowego dla projektu formantu ActiveX, został utworzony za pomocą Kreatora formantu ActiveX.
Dodawanie zdarzeń niestandardowy z zdarzenia Kreatora dodawania
Poniższa procedura dodaje określonego zdarzenia niestandardowego, ClickIn.Ta procedura umożliwia dodawanie innych niestandardowych zdarzeń.Podstaw nazwę zdarzenia niestandardowego i jego parametry dla parametrów i nazwy zdarzenia ClickIn.
Aby dodać niestandardowe zdarzenie ClickIn za pomocą Kreatora dodawania zdarzeń
Załadować projekt programu kontroli.
W widoku klasy kliknij prawym przyciskiem myszy klasy formantu ActiveX, aby otworzyć menu skrótów.
W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodać zdarzenie.
Zostanie otwarty Kreator dodawania zdarzeń.
W nazwy zdarzenia polu, najpierw zaznacz wszelkie istniejące zdarzenia, a następnie kliknij na Niestandardowy radio przycisk, a następnie wpisz ClickIn.
W wewnętrznej nazwy wpisz nazwę funkcji wypalania zdarzenia.Na przykład używać domyślnej wartości przez Kreatora dodawania zdarzenia (FireClickIn).
Dodać parametr o nazwie xCoord (typu OLE_XPOS_PIXELS), korzystanie z Nazwa parametru i Typ parametru kontroli.
Dodać drugi parametr o nazwie yCoord (typu OLE_YPOS_PIXELS).
Kliknij Zakończ utworzyć zdarzenia.
Dodać zmian kreatora zdarzenia dla zdarzenia niestandardowego
Podczas dodawania niestandardowych zdarzeń Kreatora dodawania zdarzeń powoduje zmiany klasy control.H.CPP i.Pliki języka IDL.Następujące przykłady kodu są specyficzne dla zdarzenia ClickIn.
Dodaje się następujące wiersze do nagłówka (.H) plik klasy kontroli:
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
Ten kod deklaruje funkcję wbudowanej o nazwie FireClickIn wywołania COleControl::FireEvent z ClickIn zdarzeń i parametry zdefiniowany za pomocą Kreatora dodawania zdarzeń.
Ponadto dodaje się następujący wiersz mapy zdarzeń dla formantu, znajdujące się w realizacji (.CPP) plik klasy kontroli:
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Ten kod mapuje funkcji śródwierszowej zdarzenia ClickIn FireClickIn, przekazując parametry zdefiniowane, przy użyciu Kreatora dodawania zdarzeń.
Wreszcie aby Twoje kontroli dodaje się następujący wiersz.Plik IDL:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Ten wiersz przypisuje zdarzenia ClickIn określonego numeru ID z pozycji zdarzenie na liście zdarzeń Kreatora dodawania zdarzeń.Wpis na liście zdarzeń umożliwia kontenera do przewidzenia zdarzenia.Na przykład może ona obsługi kodu do wykonania, gdy zdarzenie jest wywoływane.
Wywołanie FireClickIn
Teraz, dodano ClickIn zdarzenia niestandardowego za pomocą Kreatora dodawania zdarzenia, należy zdecydować, kiedy to zdarzenie jest do opalania.Można to zrobić, wywołując FireClickIn po wystąpieniu odpowiednie działania.Dla tej dyskusji wykorzystuje formant InCircle działać wewnątrz WM_LBUTTONDOWN obsługi wiadomości na ogień zdarzenia ClickIn, gdy użytkownik kliknie wewnątrz regionu okrągły lub eliptycznego.Dodaje się następującą procedurę WM_LBUTTONDOWN obsługi.
Aby dodać obsługi wiadomości za pomocą Kreatora dodawania zdarzeń
Załadować projekt programu kontroli.
W widoku klasy zaznacz klasy formantu ActiveX.
W oknie dialogowym właściwości kliknij wiadomości przycisk.
Okno właściwości zawiera listę wiadomości, które są obsługiwane przez formant ActiveX.Każda wiadomość pogrubione już ma ją przypisano funkcję obsługi.
W oknie Właściwości zaznacz wiadomość, którą chcesz obsługiwać.Na przykład wybierz WM_LBUTTONDOWN.
W polu listy rozwijanej po prawej stronie wybierz <Add> OnLButtonDown.
Kliknij dwukrotnie nową funkcją w widoku klasy, aby przeskoczyć do kodu obsługi wiadomości w realizacji (.Plik CPP) formantu ActiveX.
Następujący kod dodaje do wywołań próbki Okrąg działać przy każdym kliknięciu lewym przyciskiem myszy wewnątrz okna formantu.W przykładzie można znaleźć w WM_LBUTTONDOWN funkcji obsługi OnLButtonDown, okólnik próbki abstrakcyjny.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
[!UWAGA]
Kreator dodawania zdarzeń tworzy programy obsługi wiadomości dla akcji przycisków myszy, jest automatycznie dodawany wywołania do tej samej obsługi wiadomości klasy bazowej.Nie należy usuwać tego wywołania.Jeśli formant jest używany jeden z komunikatów myszy zapasów, programy obsługi wiadomości w klasie bazowej musi zostać wywołana zapewnienie przechwytywanie myszy jest obsługiwane poprawnie.
W poniższym przykładzie zdarzenie pożary, kiedy kliknij występuje tylko wewnątrz regionu okrągły lub eliptycznego wewnątrz formantu.Aby osiągnąć ten problem, można umieścić InCircle funkcji w realizacji programu kontroli (.Plik CPP):
VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
CRect rc;
GetClientRect(rc);
// Determine radii
double a = (rc.right - rc.left) / 2;
double b = (rc.bottom - rc.top) / 2;
// Determine x, y
double x = point.x - (rc.left + rc.right) / 2;
double y = point.y - (rc.top + rc.bottom) / 2;
// Apply ellipse formula
return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}
Będzie również należy dodać następującą deklarację InCircle funkcji, jeśli formant nagłówka (.H) pliku:
VARIANT_BOOL InCircle(CPoint& point);
Zdarzenia niestandardowe z nazwy zasobu
Można tworzyć niestandardowych zdarzeń z taką samą nazwę jak zdarzenia zapasów, jednak nie można zaimplementować zarówno w tym samym formancie.Na przykład można utworzyć niestandardowe zdarzenie nazywane kliknij przycisk, który nie ognia, gdy zdarzenie zapasów kliknij normalnie byłoby ognia.Zdarzenie Click w dowolnym momencie można następnie ognia, wywołując funkcję jego wypalania.
Poniższa procedura dodaje niestandardowe kliknij zdarzenie.
Aby dodać niestandardowe zdarzenie, które używa nazwy zdarzenia zapasów
Załadować projekt programu kontroli.
W widoku klasy kliknij prawym przyciskiem myszy klasy formantu ActiveX, aby otworzyć menu skrótów.
W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodać zdarzenie.
Zostanie otwarty Kreator dodawania zdarzeń.
W Nazwy zdarzenia rozwijanej wybierz nazwę zdarzenia zapasów.Na przykład wybierz kliknij.
Dla Typu zdarzenia, wybierz opcję Niestandardowy.
Kliknij Zakończ utworzyć zdarzenia.
Wywołanie FireClick w odpowiednich miejscach w kodzie.