Dela via


ActiveX-kontrollcontainrar: Hantera händelser från en ActiveX-kontroll

I den här artikeln beskrivs hur du använder fönstret Egenskaper (i klassvyn) för att installera händelsehanterare för ActiveX-kontroller i en ActiveX-kontrollcontainer. Händelsehanterarna används för att ta emot meddelanden (från kontrollen) om vissa händelser och utföra en åtgärd som svar. Det här meddelandet kallas att "starta" händelsen.

Viktigt!

ActiveX är en äldre teknik som inte bör användas för ny utveckling. Mer information om moderna tekniker som ersätter ActiveX finns i ActiveX-kontroller.

Anmärkning

Den här artikeln använder ett dialogbaserat ActiveX-kontrollcontainerprojekt med namnet Container och en inbäddad kontroll med namnet Circ som exempel i procedurerna och koden.

Med knappen Händelser i fönstret Egenskaper (i klassvyn) kan du skapa en karta över händelser som kan inträffa i ditt ActiveX-kontrollcontainerprogram. Den här kartan, som kallas "mappning för händelsemottagare", skapas och underhålls av Visual C++ när du lägger till händelsehanterare i kontrollcontainerklassen. Varje händelsehanterare, som implementeras med en händelsekarta, mappar en specifik händelse till en medlemsfunktion för containerns händelsehanterare. Den här händelsehanterarfunktionen anropas när den angivna händelsen utlöses av ActiveX-kontrollobjektet.

Mer information om mappningar för händelsemottagare finns i Mappningar för händelsemottagare i klassbiblioteksreferensen.

Händelsehanterarändringar i projektet

När du använder fönstret Egenskaper för att lägga till händelsehanterare deklareras och definieras en händelsekarta i ditt projekt. Följande instruktioner läggs till i kontrollen . CPP-filen första gången en händelsehanterare läggs till. Den här koden deklarerar en händelsemottagningskarta för dialogruteklassen (i det här fallet CContainerDlg):

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()

När du använder fönstret Egenskaper för att lägga till händelser läggs en händelseöversiktspost (ON_EVENT) till på kartan för händelsemottagaren och en händelsehanterarfunktion läggs till i containerns implementering (. CPP)-fil.

I följande exempel deklareras en händelsehanterare med namnet OnClickInCircCtrl, för Circ-kontrollens ClickIn händelse:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
         VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

Dessutom läggs följande mall till i klassimplementeringen CContainerDlg (. CPP)-fil för händelsehanterarmedlemsfunktionen:

BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
   // use nX and nY here
   TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
   return TRUE;
}

Mer information om händelsemottagaremakron finns i Mappningar för händelsemottagare i klassbiblioteksreferensen.

Så här skapar du en händelsehanterarfunktion

  1. Från Klassvy väljer du den dialogklass som innehåller ActiveX-kontrollen. I det här exemplet använder du CContainerDlg.

  2. I fönstret Egenskaper klickar du på knappen Händelser .

  3. I fönstret Egenskaper väljer du kontroll-ID för den inbäddade ActiveX-kontrollen. I det här exemplet använder du IDC_CIRCCTRL1.

    Fönstret Egenskaper visar en lista över händelser som kan utlöses av den inbäddade ActiveX-kontrollen. Alla medlemsfunktioner som visas i fetstil har redan tilldelats hanterarfunktioner.

  4. Välj den händelse som du vill att dialogklassen ska hantera. I det här exemplet väljer du Klicka.

  5. I listrutan till höger väljer du <Lägg till> ClickCircctrl1.

  6. Dubbelklicka på den nya hanteringsfunktionen från klassvyn för att gå till händelsehanterarkoden i implementeringen (. CPP)-fil för CContainerDlg.

Se även

ActiveX-kontrollcontainrar