Formanty MFC ActiveX: dodawanie zdarzeń niestandardowych
Zdarzenia niestandardowe różnią się od podstawowego zdarzenia nie są one automatycznie uruchamiane przez klasę COleControl.Niestandardowe zdarzenie rozpoznaje jakiejś czynności, określone przez autora kontroli, jako wydarzenie.Wpisy map zdarzeń dla zdarzeń niestandardowych są reprezentowane przez EVENT_CUSTOM makro.Dodaje się sekcję implementuje zdarzenia niestandardowego dla projektu formantu ActiveX, który został utworzony za pomocą Kreatora formantów ActiveX.
Dodawanie niestandardowego zdarzenia z zdarzeń Kreatora dodawania
Poniższa procedura opisuje dodawanie określonego zdarzenia niestandardowego ClickIn.Ta procedura służy do dodawania innych niestandardowych zdarzeń.Podstaw nazwę zdarzenia niestandardowego i jego parametry nazwy zdarzenia ClickIn i parametrów.
Aby dodać niestandardowe zdarzenie ClickIn za pomocą Kreatora dodawania zdarzeń
Załaduj projekt z 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.
Spowoduje to otwarcie Kreatora dodawania zdarzeń.
W Nazwa zdarzenia pole, 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 zwalniania zdarzenia.W tym przykładzie należy używać domyślnej wartości dostarczonych przez Kreatora dodawania zdarzeń (FireClickIn).
Dodać parametr o nazwie xCoord (typ OLE_XPOS_PIXELS), z wykorzystaniem Nazwa parametru i Typ parametru kontroli.
Dodać drugi parametr o nazwie yCoord (typ OLE_YPOS_PIXELS).
Kliknij przycisk Zakończ utworzyć zdarzenia.
Dodać zmiany Kreator zdarzeń dla zdarzenia niestandardowego
Po dodaniu zdarzenia niestandardowego kreatora dodawania zdarzeń wprowadza zmiany do klasy kontroli.H.CPP, i.Pliki IDL.W następujących przykładach kodu są specyficzne dla zdarzenia ClickIn.
Następujące wiersze są dodawane 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 wbudowanej funkcji o nazwie FireClickIn wywołującym COleControl::FireEvent z ClickIn zdarzeń i parametry zdefiniowany za pomocą Kreatora dodawania zdarzeń.
Ponadto dodaje się następujący wiersz do mapy zdarzeń dla formantu, znajdujących się we wdrażaniu (.Plik CPP) klasy kontroli:
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Ten kod jest mapowany zdarzenia ClickIn funkcja śródwierszowej FireClickIn, przekazując parametry zdefiniowane za pomocą Kreatora dodawania zdarzeń.
Wreszcie dodaje się następujący wiersz z formantem.Plik IDL:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Ten wiersz przypisuje zdarzenia ClickIn określonego numeru ID, podjęte z pozycji zdarzenia na liście Zdarzenie Kreatora dodawania zdarzeń.Wpis na liście zdarzeń pozwala kontenera do przewidzenia zdarzenie.Na przykład może on stanowić kod obsługi ma być wykonane, gdy zdarzenie jest uruchamiane.
Wywołanie FireClickIn
Teraz, gdy dodano ClickIn zdarzenia niestandardowego za pomocą Kreatora dodawania zdarzeń, należy zdecydować, kiedy to zdarzenie jest do opalania.Można to zrobić przez wywołanie FireClickIn po wystąpieniu odpowiednią akcję.Dla tej dyskusji, formant ten zajmuje InCircle funkcja wewnątrz WM_LBUTTONDOWN obsługi wiadomości zdarzenia ClickIn, gdy użytkownik kliknie wewnątrz regionu okrągły lub eliptycznego.Poniższa procedura opisuje dodawanie WM_LBUTTONDOWN obsługi.
Aby dodać obsługi wiadomości przy użyciu Kreatora dodawania zdarzeń
Załaduj projekt z kontroli.
W widoku klasy Wybierz klasy formantu ActiveX.
W oknie 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.Wszystkie wiadomości oznaczone pogrubioną czcionką już przypisano funkcję obsługi do niego.
W oknie Właściwości zaznacz wiadomość, którą chcesz obsługiwać.W tym przykładzie należy wybrać WM_LBUTTONDOWN.
W polu listy rozwijanej po prawej stronie, wybierz opcję <Dodaj > OnLButtonDown.
Kliknij dwukrotnie nową funkcję obsługi w widoku klasy, aby przeskoczyć do kodu obsługi wiadomości w realizacji (.Plik CPP) formantu ActiveX.
Poniższy kod wywoła próbki Okrąg funkcja każdorazowym kliknięciu lewym przyciskiem myszy wewnątrz okna formantu.Próbka ta znajduje się w WM_LBUTTONDOWN funkcji obsługi OnLButtonDown, w próbki Circ streszczenie.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
[!UWAGA]
Kiedy Kreator dodawania zdarzeń tworzy programy obsługi wiadomości dla przycisku myszy, wywołanie tej procedury obsługi wiadomości klasy podstawowej jest automatycznie dodawane.Nie należy usuwać tego wywołania.Jeśli formant jest używany jeden z komunikatów akcji myszy, obsługi wiadomości w klasie bazowej musi zostać wywołany do zapewnienia, że przechwytywanie myszy jest obsługiwane poprawnie.
W poniższym przykładzie zdarzenie pożarów, tylko gdy kliknięcie występuje wewnątrz regionu okrągły lub eliptycznego wewnątrz formantu.Aby to osiągnąć, można umieścić InCircle funkcji w implementacji sieci formantu (.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);
}
Również należy dodać następującą deklarację o InCircle funkcji do nagłówka z kontroli (.H) plik:
VARIANT_BOOL InCircle(CPoint& point);
Zdarzenia niestandardowe z nazwy akcji
Zdarzenia niestandardowe można utworzyć z taką samą nazwę jak czas zdarzenia, jednak nie można zaimplementować zarówno w tym samym formancie.Na przykład można utworzyć niestandardowe zdarzenie o nazwie kliknij przycisk, który nie jest wyzwalana, gdy czas zdarzenia Click byłyby normalnie ognia.Zdarzenie Click może następnie ogień w dowolnym momencie, wywołując jego funkcja wypalania.
Poniższa procedura opisuje dodawanie niestandardowych kliknij zdarzenie.
Aby dodać niestandardowe zdarzenie, które jest używana nazwa wydarzenia
Załaduj projekt z 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.
Spowoduje to otwarcie Kreatora dodawania zdarzeń.
W Nazwa zdarzenia listy rozwijanej listy, zaznacz nazwę wydarzenia.W tym przykładzie należy wybrać kliknij.
Dla Typ zdarzenia, wybierz opcję Niestandardowy.
Kliknij przycisk Zakończ utworzyć zdarzenia.
Wywołanie FireClick w odpowiednich miejscach w kodzie.