Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Aangepaste gebeurtenissen verschillen van aandelenevenementen omdat ze niet automatisch door klasse COleControlworden geactiveerd. Een aangepaste gebeurtenis herkent een bepaalde actie, bepaald door de besturingselementontwikkelaar, als een gebeurtenis. De vermeldingen in het gebeurtenisoverzicht voor aangepaste gebeurtenissen worden vertegenwoordigd door de EVENT_CUSTOM macro. In de volgende sectie wordt een aangepaste gebeurtenis geïmplementeerd voor een ActiveX-besturingselement dat is gemaakt met behulp van de ActiveX-controlewizard.
Een aangepaste gebeurtenis toevoegen met de wizard Gebeurtenis toevoegen
Met de volgende procedure wordt een specifieke aangepaste gebeurtenis toegevoegd, ClickIn. U kunt deze procedure gebruiken om andere aangepaste gebeurtenissen toe te voegen. Vervang de naam van uw aangepaste gebeurtenis en de bijbehorende parameters door de naam en parameters van de ClickIn-gebeurtenis.
De aangepaste ClickIn-gebeurtenis toevoegen met de wizard Gebeurtenis toevoegen
Laad het project van uw besturingselement.
Klik in de klassenweergave met de rechtermuisknop op uw ActiveX-besturingselementklasse om het snelmenu te openen.
Klik in het snelmenu op Toevoegen en klik vervolgens op Gebeurtenis toevoegen.
Hiermee opent u de wizard Gebeurtenis toevoegen.
Selecteer eerst een bestaande gebeurtenis in het vak Gebeurtenisnaam en klik vervolgens op het keuzerondje Aangepast en typ ClickIn.
Typ de naam van de functie die de gebeurtenis activeert in het vak Interne naam. Gebruik voor dit voorbeeld de standaardwaarde van de wizard Gebeurtenis toevoegen (
FireClickIn).Voeg een parameter toe met de naam xCoord (type OLE_XPOS_PIXELS), met behulp van de besturingselementen Parameternaam en Parametertype .
Voeg een tweede parameter toe met de naam yCoord (typ OLE_YPOS_PIXELS).
Klik op Voltooien om de gebeurtenis te maken.
Wijzigingen in de wizard Gebeurtenis toevoegen voor aangepaste gebeurtenissen
Wanneer u een aangepaste gebeurtenis toevoegt, brengt de wizard Gebeurtenis toevoegen wijzigingen aan in de control class- .H-, .CPP- en .IDL-bestanden. De volgende codevoorbeelden zijn specifiek voor de ClickIn-gebeurtenis.
De volgende regels worden toegevoegd aan de koptekst (. H) bestand van uw controleklasse:
void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}
Met deze code declareert u een inlinefunctie FireClickIn die COleControl::FireEvent aanroept met de ClickIn-gebeurtenis en parameters die u hebt gedefinieerd met behulp van de wizard Gebeurtenis toevoegen.
Daarnaast wordt de volgende regel toegevoegd aan het gebeurtenisoverzicht voor het besturingselement, dat zich in de implementatie bevindt (. CPP)-bestand van uw controleklasse:
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
Met deze code wordt de gebeurtenis ClickIn toegewezen aan de inlinefunctie FireClickIn, waarbij de parameters worden doorgegeven die u hebt gedefinieerd met behulp van de wizard Gebeurtenis toevoegen.
Ten slotte wordt de volgende regel toegevoegd aan het .IDL-bestand van uw besturingselement:
[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
Met deze regel wordt aan de ClickIn-gebeurtenis een specifiek id-nummer toegewezen, dat afkomstig is van de positie van de gebeurtenis in de lijst met gebeurtenissen van de wizard Gebeurtenis toevoegen. Met de vermelding in de lijst met gebeurtenissen kan een container de gebeurtenis anticiperen. Het kan bijvoorbeeld handlercode bieden die moet worden uitgevoerd wanneer de gebeurtenis wordt geactiveerd.
FireClickIn aanroepen
Nu u de aangepaste ClickIn-gebeurtenis hebt toegevoegd met behulp van de wizard Gebeurtenis toevoegen, moet u beslissen wanneer deze gebeurtenis moet worden geactiveerd. U doet dit door aan te roepen FireClickIn wanneer de juiste actie plaatsvindt. Voor deze discussie gebruikt het besturingselement de InCircle functie in een WM_LBUTTONDOWN berichthandler om de ClickIn-gebeurtenis te activeren wanneer een gebruiker in een cirkelvormige of elliptische regio klikt. Met de volgende procedure wordt de WM_LBUTTONDOWN handler toegevoegd.
Een berichthandler toevoegen met de wizard Gebeurtenis toevoegen
Laad het project van uw besturingselement.
Selecteer uw ActiveX-besturingselementklasse in klasseweergave.
In het venster Eigenschappen ziet u een lijst met berichten die kunnen worden verwerkt door het ActiveX-besturingselement. Elk bericht dat vetgedrukt wordt weergegeven, heeft al een handler-functie toegewezen.
Selecteer het bericht dat u wilt verwerken. Voor dit voorbeeld selecteert u
WM_LBUTTONDOWN.Selecteer In de vervolgkeuzelijst aan de rechterkant de optie <Add> OnLButtonDown.
Dubbelklik op de nieuwe handlerfunctie in klasseweergave om naar de berichthandlercode in de implementatie te gaan (. CPP) bestand van uw ActiveX-besturingselement.
In het volgende codevoorbeeld wordt de InCircle functie aangeroepen telkens wanneer op de linkermuisknop wordt geklikt in het besturingselementvenster. Dit voorbeeld vindt u in de WM_LBUTTONDOWN handlerfunctie, OnLButtonDown, in het Circ-voorbeeld abstract.
void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if (InCircle(point))
FireClickIn(point.x, point.y);
COleControl::OnLButtonDown(nFlags, point);
}
Opmerking
Wanneer de wizard Gebeurtenis toevoegen berichthandlers maakt voor acties met de muisknop, wordt automatisch een aanroep naar dezelfde berichthandler van de basisklasse toegevoegd. Verwijder deze aanroep niet. Als uw besturing gebruikmaakt van een van de standaard muisberichten, moeten de berichthandlers in de basisklasse worden aangeroepen om ervoor te zorgen dat het vastleggen van de muis correct wordt verwerkt.
In het volgende voorbeeld wordt de gebeurtenis alleen geactiveerd wanneer de klik plaatsvindt in een cirkel- of elliptisch gebied binnen het besturingselement. Om dit gedrag te bereiken, kunt u de functie in de InCircle implementatie van uw controle plaatsen (. CPP)-bestand:
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);
}
U moet ook de volgende declaratie van de InCircle functie toevoegen aan de .H-header van uw controle-elementbestand:
VARIANT_BOOL InCircle(CPoint& point);
Aangepaste gebeurtenissen met aandelennamen
U kunt aangepaste gebeurtenissen maken met dezelfde naam als aandelenevenementen, maar u kunt niet beide in hetzelfde besturingselement implementeren. U kunt bijvoorbeeld een aangepaste gebeurtenis maken met de naam Klik die niet wordt geactiveerd wanneer de stock-gebeurtenis Klik normaal gesproken wordt geactiveerd. U kunt de Click-gebeurtenis vervolgens op elk gewenst moment starten door de activeringsfunctie aan te roepen.
Met de volgende procedure wordt een aangepast Click-event toegevoegd.
Een aangepaste gebeurtenis toevoegen die gebruikmaakt van de naam van een aandelenevenement
Laad het project van uw besturingselement.
Klik in de klassenweergave met de rechtermuisknop op uw ActiveX-besturingselementklasse om het snelmenu te openen.
Klik in het snelmenu op Toevoegen en klik vervolgens op Gebeurtenis toevoegen.
Hiermee opent u de wizard Gebeurtenis toevoegen.
In de vervolgkeuzelijst Gebeurtenisnaam, selecteer een naam van een aandelengebeurtenis. Voor dit voorbeeld selecteert u Klikken.
Selecteer Aangepast voor gebeurtenistype.
Klik op Voltooien om de gebeurtenis te maken.
Roep
FireClickop de juiste plaatsen in uw code aan.
Zie ook
MFC ActiveX-besturingselementen
MFC ActiveX-controles: methoden
COleControl-klasse