Partager via


Contrôles ActiveX MFC : Ajouter des événements personnalisés

Les événements personnalisés diffèrent des événements stock en ce qu'ils ne sont pas automatiquement déclenchés par la classe COleControl.Un événement personnalisé identifie une action, déterminée par le développeur de contrôles, comme un événement.Les entrées de mappage d'événements pour les événements personnalisés sont représentées par le d' EVENT_CUSTOM .La section suivante implémente un événement personnalisé pour un projet de contrôle ActiveX qui a été créé à l'aide de l'Assistant Contrôle ActiveX.

Ajouter un événement personnalisé avec l'Assistant Ajout d'événement

La procédure suivante ajoute un événement utilisateur spécifique, ClickIn.Vous pouvez utiliser cette procédure pour ajouter d'autres événements personnalisés.Substituez votre nom d'événement personnalisé et ses paramètres pour le nom de l'évènement et les paramètres de ClickIn.

Pour ajouter l'événement personnalisé de ClickIn à l'aide de l'Assistant Ajout d'événement

  1. Chargez le projet de votre contrôle.

  2. Dans l'Affichage de classes, cliquez avec le bouton droit sur votre classe de contrôles ActiveX pour ouvrir le menu contextuel.

  3. Dans le menu contextuel, cliquez sur Ajouter puis cliquez sur Ajouter un événement.

    Cela ouvre l'Assistant Ajout d'événement.

  4. Dans la zone de Nom de l'événement , d'abord sélectionnez n'importe quel événement existant, puis cliquez sur la case d'option Personnalisée , sur le type ClickIn.

  5. Dans la zone de Nom interne , tapez le nom de la fonction de la mise à déclencher de l'événement.Pour cet exemple, utilisez la valeur par défaut fournie par l'Assistant Ajout d'événement (FireClickIn).

  6. Ajoutez un paramètre, xCoord appelé (type OLE_XPOS_PIXELS), à l'aide de les contrôles de Nom du paramètre et de Type de paramètre .

  7. Ajoutez un deuxième paramètre, yCoord appelé (type OLE_YPOS_PIXELS).

  8. Cliquez sur Terminer pour créer l'événement.

Modifications de l'Assistant Ajout des événements pour les événements personnalisés

Lorsque vous ajoutez un événement personnalisé, l'Assistant Ajout d'événement apporte des modifications à la classe de contrôle. fichiers de H, de .CPP, et de .IDL.Les exemples de code suivants sont spécifiques à l'événement de ClickIn.

Les lignes suivantes sont ajoutées à l'en-tête (. h) fichier de votre classe de contrôle :

void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}

Ce code déclare une fonction inline appelée FireClickIn qui appelle COleControl::FireEvent à l'événement et les paramètres de ClickIn que vous avez définis à l'aide de l'Assistant Ajout d'événement.

En outre, la ligne suivante est ajoutée à la table d'événements pour le contrôle, située dans le fichier d'implémentation (.CPP) de votre classe de contrôle :

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Ce code mappe l'événement ClickIn à la fonction inline FireClickIn, en passant les paramètres que vous avez définis à l'aide de l'Assistant Ajout d'événement.

Enfin, la ligne suivante est ajoutée au fichier .IDL de votre contrôle :

[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Cette ligne assigne à l'événement de ClickIn un numéro d'ID spécifique, pris de la position de l'événement dans la liste d'événement de l'Assistant Ajout d'événement.La liste d'entrée en cas permet à un conteneur pour anticiper l'événement.Par exemple, il peut fournir du code de gestionnaire à exécuter lorsque l'événement est déclenché.

Appeler FireClickIn

Maintenant que vous avez ajouté l'événement personnalisé de ClickIn à l'aide de l'Assistant Ajout d'événement, vous devez décider lorsque cet événement doit être déclenché.Vous pouvez le faire en appelant FireClickIn lorsque l'action appropriée se produit.Pour cette discussion, le contrôle utilise la fonction d' InCircle à l'intérieur d'un gestionnaire de messages d' WM_LBUTTONDOWN pour déclencher l'événement de ClickIn lorsqu'un utilisateur clique sur dans une circulaire ou d'une zone elliptique.La procédure suivante ajoute le gestionnaire d' WM_LBUTTONDOWN .

Pour ajouter un gestionnaire de messages avec l'Assistant Ajout d'événement

  1. Chargez le projet de votre contrôle.

  2. Dans l'Affichage de classes, sélectionnez votre classe du contrôle ActiveX.

  3. Dans la fenêtre Propriétés, cliquez sur le bouton Messages.

    La fenêtre Propriétés affiche une liste des messages qui peuvent être traités par le contrôle ActiveX.Tout message affiché en gras possède déjà une fonction gestionnaire qui lui est assignée.

  4. De la fenêtre Propriétés, sélectionnez le message que vous souhaitez utiliser.Pour cet exemple, sélectionnez WM_LBUTTONDOWN.

  5. Dans la zone de liste déroulante de droite, sélectionnez <Add> OnLButtonDown.

  6. Double-cliquez sur la nouvelle fonction gestionnaire dans l'Affichage de classes pour accéder au code de gestionnaire de messages dans le fichier d'implémentation (.CPP) de votre contrôle ActiveX.

L'exemple de code suivant appelle la fonction d' InCircle chaque fois que le bouton gauche de la souris est positionné sur dans la fenêtre du contrôle.Cet exemple se trouve dans la fonction gestionnaire d' WM_LBUTTONDOWN , OnLButtonDown, dans l'extrait du exemple de Circ .

void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
   if (InCircle(point))
      FireClickIn(point.x, point.y);

    COleControl::OnLButtonDown(nFlags, point);
}

[!REMARQUE]

Lorsque l'Assistant Ajout d'événement crée des gestionnaires de messages pour les actions de bouton de la souris, un appel au même gestionnaire de messages de la classe de base est automatiquement ajouté.Ne supprimez pas cet appel.Si votre contrôle utilise les messages de la souris stock l'un des, les gestionnaires de messages dans la classe de base doivent être appelés pour garantir que la capture de la souris est gérée correctement.

Dans l'exemple suivant, l'événement se déclenche uniquement lorsque le clic se produit dans une circulaire ou d'une zone elliptique dans le contrôle.Pour obtenir ce comportement, vous pouvez placer la fonction d' InCircle dans le fichier d'implémentation de votre contrôle (.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);
}

Vous devez également ajouter la déclaration suivante de la fonction d' InCircle à l'en-tête de votre contrôle (. h) fichier :

VARIANT_BOOL InCircle(CPoint& point);

Événements personnalisés avec des noms stock

Vous pouvez créer des événements personnalisés avec le même nom que les événements stock, mais vous ne pouvez pas implémenter ces deux dans le même contrôle.Par exemple, vous pouvez créer un événement personnalisé appelé le bouton qui ne se déclenche pas lorsque le bouton magasin d'événement se déclencherait normalement.Vous pouvez ensuite déclencher l'événement clic à tout moment en appelant la fonction de mise à déclencher.

La procédure suivante ajoute un événement clic personnalisé.

Pour ajouter un événement personnalisé qui utilise un nom de l'évènement stock

  1. Chargez le projet de votre contrôle.

  2. Dans l'Affichage de classes, cliquez avec le bouton droit sur votre classe de contrôles ActiveX pour ouvrir le menu contextuel.

  3. Dans le menu contextuel, cliquez sur Ajouter puis cliquez sur Ajouter un événement.

    Cela ouvre l'Assistant Ajout d'événement.

  4. Dans la liste déroulante de Nom de l'événement , sélectionnez un nom de l'évènement boursières.Pour cet exemple, sélectionnez Click.

  5. Pour Type d'événement, sélectionnez Personnalisée.

  6. Cliquez sur Terminer pour créer l'événement.

  7. Appelez FireClick aux emplacements appropriés dans votre code.

Voir aussi

Référence

COleControl, classe

Concepts

Contrôles ActiveX MFC

Contrôles ActiveX MFC : méthodes