Le bouton d’aide “?” Déclenche WM_HELP _et_WM_LBUTTONUP

J’ai une application Windows qui enregistre une procédure CALLBACK qui gère les messages WM_HELP pour la boîte de dialog et une procédure CALLBACK qui gère les messages WM_LBUTTONUP pour un bouton personnalisé.

Maintenant, quand l’utilisateur clique sur le “?” bouton, puis clique sur le bouton personnalisé, l’aide s’ouvre comme prévu (sur la souris), mais si la fenêtre d’aide ne ferme pas le bouton, un message WM_LBUTTONUP est également déclenché pour le bouton personnalisé (sur la souris). Cela provoque le déclenchement du bouton lorsque l’utilisateur ne demande que de l’aide.

Est-il possible d’empêcher l’envoi du message WM_LBUTTONUP si vous appuyez sur le bouton pour obtenir de l’aide?

EDIT: Le bouton personnalisé est implémenté en utilisant un contrôle STATIC. Je crois que c’est parce qu’il faut une image et pas de frontière. Ainsi, il n’envoie pas de notifications BN_CLICKED. En fait, il ne semble pas déclencher WM_COMMAND dans le parent.

Merci

C’est normal. Veillez à utiliser la notification BN_CLICKED du bouton pour voir la différence. Généré lorsque l’utilisateur clique sur le bouton, non généré lorsque l’utilisateur utilise le curseur d’aide. Le bouton voit toujours les messages de bouton haut / bas normaux, ce qui ne permet pas de détecter un clic. Un bonus supplémentaire est que le bouton peut maintenant être cliqué avec le clavier (barre d’espace).

Une bonne bibliothèque de classe prend soin de ces petits détails désagréables.

Une meilleure façon serait de créer ? en tant que contrôle personnalisé avec BS_CHECKBOX | BS_PUSHLIKE BS_CHECKBOX | BS_PUSHLIKE style et capturer la souris. Après cela, vous obtiendrez tout le message WM_LBUTTONDOWN à ce contrôle personnalisé, puis vous pourrez utiliser WindowFromPoint pour obtenir la fenêtre où le WM_LBUTTONDOWN s’est produit et envoyer une notification personnalisée à la fenêtre parente. La fenêtre parente peut alors afficher l’info-bulle ou ouvrir le document d’aide ou le supprimer.

L’avantage est que vous ne créez le contrôle qu’une seule fois et que vous pouvez l’utiliser à plusieurs endroits.

Bon, je l’ai corrigé en créant le bouton personnalisé (contrôle statique) avec le style SS_NOTIFY, puis en gérant la notification STN_CLICKED dans le message WM_COMMAND. (SS_NOTIFY provoque le déclenchement de WM_COMMAND dans le parent lorsque l’utilisateur clique dessus.) Cela ne se déclenche pas lorsque vous utilisez le “?” bouton. Merci!