J'ai actuellement quelques boutons de barre d'outils avec une petite flèche sur le côté (TBSTYLE_EX_DRAWDDARROWS
) qui, lorsqu'on clique dessus, font apparaître un menu contextuel sous le bouton. Ceci est fait en construisant un menu contextuel personnalisé et en appelant le TrackPopupMenu
.Menu contextuel MFC "collant"
Le client souhaite maintenant pouvoir sélectionner plusieurs options dans le menu avant de les fermer, de sorte que plusieurs options puissent être modifiées sans avoir besoin de rouvrir le menu et d'attendre un rafraîchissement intermédiaire entre chaque changement.
Par exemple:
- utilisateur clique sur le bouton déroulant
- menu déroulant apparaît (modal, attend indéfiniment pour une action de l'utilisateur)
- utilisateur clique sur un certain élément (par exemple, passer d'une coche)
- minuterie (par exemple 500 ms) démarre
- Si la temporisation expire, le menu est fermé et toutes les actions sélectionnées sont exécutées.
- utilisateur clique sur un autre élément avant que la minuterie arrive à expiration, revenir à 4.
Le meilleur que je peux trouver est de réafficher le menu en appelant TrackPopupMenu
plusieurs fois. Cela rend le menu "flicker" lorsque vous sélectionnez un élément, et me demandera probablement de démarrer un thread afin de faire les délais d'attente, que je préfère éviter.
Je ne suis pas totalement convaincu par l'idée, l'intention est raisonnable. Avoir à ré-ouvrir le menu pour chaque changement est fastidieux, au moins dans cette application. J'ai envisagé d'utiliser autre chose qu'un menu, et c'est une option, mais un menu fournit des fonctionnalités considérables, telles que le redimensionnement automatique pour s'adapter à son contenu, se placer sur l'écran pour être visible, afficher les icônes des cases à cocher icônes, etc., que je devrais construire manuellement. –