Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anpassade händelser skiljer sig från lagerhändelser eftersom de inte automatiskt utlöses av klassen COleControl. En anpassad händelse identifierar en viss åtgärd, som bestäms av kontrollutvecklaren, som en händelse. Händelsemappningsposterna för anpassade händelser representeras av makrot EVENT_CUSTOM. I följande avsnitt implementeras en anpassad händelse för ett ActiveX-kontrollprojekt som skapades med hjälp av ActiveX-kontrollguiden.
Lägga till en anpassad händelse med guiden Lägg till händelse
Följande procedur lägger till en specifik anpassad händelse, ClickIn. Du kan använda den här proceduren för att lägga till andra anpassade händelser. Ersätt ditt anpassade händelsenamn och dess parametrar med clickin-händelsenamnet och parametrarna.
Så här lägger du till den anpassade ClickIn-händelsen med hjälp av guiden Lägg till händelse
Läs in kontrollens projekt.
I Klassvy högerklickar du på din ActiveX-kontrollklass för att öppna snabbmenyn.
På snabbmenyn klickar du på Lägg till och sedan på Lägg till händelse.
Då öppnas guiden Lägg till händelse.
I rutan Händelsenamn väljer du först en befintlig händelse, klickar sedan på alternativknappen Anpassad, och skriver sedan ClickIn.
I rutan Internt namn skriver du namnet på händelsens avfyrningsfunktion. I det här exemplet använder du standardvärdet som tillhandahålls av guiden Lägg till händelse (
FireClickIn).Lägg till en parameter med namnet xCoord (typ OLE_XPOS_PIXELS) med hjälp av kontrollerna Parameternamn och Parametertyp .
Lägg till en andra parameter med namnet yCoord (typ OLE_YPOS_PIXELS).
Klicka på Slutför för att skapa händelsen.
Lägg till ändringar i händelseguiden för anpassade händelser
När du lägger till en anpassad händelse gör guiden Lägg till händelse ändringar i kontrollklassen . H, . CPP och . IDL-filer. Följande kodexempel är specifika för ClickIn-händelsen.
Följande rader läggs till i rubriken (. H)-fil för kontrollklassen:
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
Den här koden deklarerar en infogad funktion med namnet FireClickIn som anropar COleControl::FireEvent med den ClickIn-händelse och parametrar som du definierade med hjälp av guiden Lägg till händelse.
Dessutom läggs följande rad till i händelsekartan för kontrollen, som finns i implementeringen (. CPP)-fil för kontrollklassen:
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Den här koden mappar händelsen ClickIn till den infogade funktionen FireClickInoch skickar de parametrar som du definierade med hjälp av guiden Lägg till händelse.
Slutligen läggs följande rad till i kontrollens . IDL-fil:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Den här raden tilldelar ClickIn-händelsen ett specifikt ID-nummer som hämtats från händelsens position i händelselistan Lägg till händelseguide. Posten i händelselistan gör att en container kan förbereda sig för händelsen. Den kan till exempel tillhandahålla hanteringskod som ska köras när händelsen utlöses.
Anropa FireClickIn
Nu när du har lagt till den anpassade ClickIn-händelsen med hjälp av guiden Lägg till händelse måste du bestämma när händelsen ska utlöses. Du gör detta genom att anropa FireClickIn när rätt åtgärd inträffar. För den här diskussionen använder styrningen InCircle-funktionen inom en WM_LBUTTONDOWN-meddelandehanterare för att aktivera ClickIn-händelsen när en användare klickar i en cirkulär eller elliptisk region. Följande procedur lägger till WM_LBUTTONDOWN hanteraren.
Så här lägger du till en meddelandehanterare med guiden Lägg till händelse
Läs in kontrollens projekt.
I Klassvy väljer du din ActiveX-kontrollklass.
I fönstret Egenskaper visas en lista över meddelanden som kan hanteras av ActiveX-kontrollen. Alla meddelanden som visas i fetstil har redan en hanterarfunktion tilldelad till sig.
Välj det meddelande som du vill hantera. I det här exemplet väljer du
WM_LBUTTONDOWN.I listrutan till höger väljer du <Lägg till> OnLButtonDown.
Dubbelklicka på den nya hanteringsfunktionen i klassvyn för att gå till meddelandehanterarkoden i implementeringen (. CPP)-fil för din ActiveX-kontroll.
Följande kodexempel anropar InCircle funktionen varje gång den vänstra musknappen klickas i kontrollfönstret. Det här exemplet finns i WM_LBUTTONDOWN hanteringsfunktionenOnLButtonDown, i den abstrakta Circ-exemplet.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
Anmärkning
När guiden Lägg till händelse skapar meddelandehanterare för musknappsåtgärder läggs ett anrop till samma meddelandehanterare för basklassen automatiskt. Ta inte bort det här anropet. Om kontrollen använder några av standardmusmeddelandena måste meddelandehanterarna i basklassen anropas för att se till att musfångst hålls på ett korrekt sätt.
I följande exempel utlöses händelsen endast när klickningen sker i en cirkulär eller elliptisk region i kontrollen. För att uppnå det här beteendet kan du placera InCircle funktionen i kontrollens implementering (. CPP)-fil:
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);
}
Du måste också lägga till följande deklaration av funktionen InCircle i kontrollens huvud (.H)-fil:
VARIANT_BOOL InCircle(CPoint& point);
Anpassade händelser med lagernamn
Du kan skapa anpassade händelser med samma namn som lagerhändelser, men du kan inte implementera båda i samma kontroll. Du kanske till exempel vill skapa en anpassad händelse med namnet Klicka som inte utlöses när aktiehändelsen Klicka normalt utlöses. Du kan sedan utlösa click-händelsen när som helst genom att anropa dess avfyrningsfunktion.
Följande procedur lägger till en anpassad klickhändelse.
Så här lägger du till en anpassad händelse som använder ett lagerhändelsenamn
Läs in kontrollens projekt.
I Klassvy högerklickar du på din ActiveX-kontrollklass för att öppna snabbmenyn.
På snabbmenyn klickar du på Lägg till och sedan på Lägg till händelse.
Då öppnas guiden Lägg till händelse.
I listrutan Händelsenamn väljer du ett lagerhändelsenamn. I det här exemplet väljer du Klicka.
För Händelsetyp väljer du Anpassad.
Klicka på Slutför för att skapa händelsen.
Anropa
FireClickpå lämpliga platser i koden.
Se även
MFC ActiveX-kontroller
MFC ActiveX-kontroller: Metoder
COleControl-klass