Partager via


Personnalisation du clavier et de la souris

MFC permet à l’utilisateur de votre application de personnaliser la façon dont elle gère l’entrée du clavier et de la souris. L’utilisateur peut personnaliser l’entrée du clavier en affectant des raccourcis clavier aux commandes. L’utilisateur peut également personnaliser l’entrée de la souris en sélectionnant la commande qui doit être exécutée lorsque l’utilisateur double-clique dans des fenêtres spécifiques de l’application. Cette rubrique explique comment personnaliser l’entrée pour votre application.

Dans la boîte de dialogue Personnalisation , l’utilisateur peut modifier les contrôles personnalisés de la souris et du clavier. Pour afficher cette boîte de dialogue, l’utilisateur pointe vers Personnaliser dans le menu Affichage , puis clique sur Barres d’outils et Ancrage. Dans la boîte de dialogue, l’utilisateur clique sur l’onglet Clavier ou l’onglet Souris .

Personnalisation du clavier

L’illustration suivante montre l’onglet Clavier de la boîte de dialogue Personnalisation .

Onglet Clavier dans la boîte de dialogue Personnaliser.
Onglet Personnalisation du clavier

L’utilisateur interagit avec l’onglet clavier pour affecter un ou plusieurs raccourcis clavier à une commande. Les commandes disponibles sont répertoriées sur le côté gauche de l’onglet. L’utilisateur peut sélectionner n’importe quelle commande disponible dans le menu. Seules les commandes de menu peuvent être associées à un raccourci clavier. Une fois que l'utilisateur entre un nouveau raccourci, le bouton Attribuer s'active. Lorsque l’utilisateur clique sur ce bouton, l’application associe la commande sélectionnée à ce raccourci.

Tous les raccourcis clavier actuellement attribués sont répertoriés dans la zone de liste de la colonne de droite. L’utilisateur peut également sélectionner des raccourcis individuels et les supprimer, ou réinitialiser tous les mappages pour l’application.

Si vous souhaitez prendre en charge cette personnalisation dans votre application, vous devez créer un objet CKeyboardManager . Pour créer un CKeyboardManager objet, appelez la fonction CWinAppEx ::InitKeyboardManager. Cette méthode crée et initialise un gestionnaire de clavier. Si vous créez manuellement un gestionnaire de clavier, vous devez toujours appeler CWinAppEx::InitKeyboardManager pour l’initialiser.

Si vous utilisez l’Assistant pour créer votre application, l’Assistant initialise le gestionnaire de clavier. Une fois que votre application initialise le gestionnaire de clavier, l’infrastructure ajoute un onglet Clavier à la boîte de dialogue Personnalisation .

Personnalisation de la souris

L’illustration suivante montre l’onglet Souris de la boîte de dialogue Personnalisation .

Onglet Souris dans la boîte de dialogue Personnaliser.
Onglet Personnalisation de la souris

L’utilisateur interagit avec cet onglet pour affecter une commande de menu à l’action double-clic de la souris. L’utilisateur sélectionne une vue à partir du côté gauche de la fenêtre, puis utilise les contrôles du côté droit pour associer une commande à l’action en double-clic. Une fois que l’utilisateur clique sur Fermer, l’application exécute la commande associée chaque fois que l’utilisateur double-clique n’importe où dans l’affichage.

Par défaut, la personnalisation de la souris n’est pas activée lorsque vous créez une application à l’aide de l’Assistant.

Pour activer la personnalisation de la souris

  1. Initialisez un objet CMouseManager en appelant CWinAppEx ::InitMouseManager.

  2. Obtenez un pointeur vers le gestionnaire de souris à l’aide de CWinAppEx ::GetMouseManager.

  3. Ajoutez des vues au gestionnaire de souris à l’aide de la méthode CMouseManager ::AddView . Effectuez cette opération pour chaque affichage que vous souhaitez ajouter au gestionnaire de souris.

Une fois que votre application initialise le gestionnaire de souris, l’infrastructure ajoute l’onglet Souris à la boîte de dialogue Personnaliser . Si vous n’ajoutez aucune vue, l’accès à l’onglet entraîne une exception non gérée. Une fois que vous avez créé une liste de vues, l’onglet Souris est disponible pour l’utilisateur.

Lorsque vous ajoutez une nouvelle vue au gestionnaire de souris, vous lui attribuez un ID unique. Si vous souhaitez prendre en charge la personnalisation de la souris pour une fenêtre, vous devez traiter le message WM_LBUTTONDBLCLICK et appeler la fonction CWinAppEx ::OnViewDoubleClick . Lorsque vous appelez cette fonction, l’un des paramètres est l’ID de cette fenêtre. Il incombe au programmeur de suivre les numéros d’ID et les objets associés.

Problèmes de sécurité

Comme décrit dans Outils définis par l’utilisateur, l’utilisateur peut associer un ID d’outil défini par l’utilisateur à l’événement double-clic. Lorsque l’utilisateur double-clique sur une vue, l’application recherche un outil utilisateur qui correspond à l’ID associé. Si l’application trouve un outil correspondant, il exécute l’outil. Si l’application ne trouve pas d’outil correspondant, elle envoie un message WM_COMMAND avec l’ID à la vue qui a été double-cliqué.

Les paramètres personnalisés sont stockés dans le Registre. En modifiant le Registre, un attaquant peut remplacer un ID d’outil utilisateur valide par une commande arbitraire. Lorsque l’utilisateur double-clique sur une vue, la vue traite la commande que l’attaquant a plantée. Cela peut entraîner un comportement inattendu et potentiellement dangereux.

En outre, ce type d’attaque peut contourner les protections de l’interface utilisateur. Par exemple, supposons qu’une application ait désactivé l’impression. Autrement dit, dans son interface utilisateur, le menu Imprimer et le bouton ne sont pas disponibles. Normalement, cela empêche l’impression de l’application. Toutefois, si un attaquant a modifié le Registre, un utilisateur peut maintenant envoyer la commande d’impression directement en double-cliquant sur l’affichage, en contournant les éléments d’interface utilisateur qui ne sont pas disponibles.

Pour vous protéger contre ce type d’attaque, ajoutez du code au gestionnaire de commandes de votre application pour vérifier qu’une commande est valide avant son exécution. Ne dépendez pas de l’interface utilisateur pour empêcher l’envoi d’une commande à l’application.

Voir aussi

Personnalisation pour MFC
CKeyboardManager, classe
Classe CMouseManager
Implications en matière de sécurité de la personnalisation