2011-01-18 4 views
1

Y a-t-il un moyen de changer la position du menu contextuel. Avec les fenêtres de niveau supérieur je peux le faire par CBTProc Callback Function et MoveWindow. Puis-je faire de même avec les menus? Doit être fait de sorte que le menu contextuel se trouve uniquement dans la zone de la fenêtre parente. Quelque chose comme un gestionnaire de fenêtre léger.Windows. Changer la position du menu déroulant

Répondre

1

Oui, dans un rappel de hook WH_CBT, vous serez averti avec un 'nCode' de HCBT_CREATEWND chaque fois qu'une fenêtre de menu est créée. Test pour le nom de la classe, menu standard/sous-menu aurait un nom de classe de '# 32768'. Vous pouvez ensuite envoyer un message MN_GETHMENU à la fenêtre pour savoir quel menu est sur le point d'être activé. Mais as documented, il est trop tôt pour déplacer la fenêtre lorsque la notification est reçue, le menu n'est même pas encore visible, vous devrez donc peut-être sous-classer la fenêtre et traiter les messages supplémentaires. Notez que vous n'avez pas besoin d'un crochet pour être averti lorsqu'une fenêtre de menu est affichée, vous pouvez mettre un gestionnaire pour le message WM_ENTERIDLE, tester pour 'wParam' pour voir si un menu a provoqué le message, obtenir le menu fenêtre à partir de 'lParam' et à nouveau envoyer un 'MN_GETHMENU' pour trouver le menu spécifique. Il est possible de déplacer la fenêtre à ce stade sans autre traitement de message. Sachez simplement que 'WM_ENTERIDLE' sera appelé plusieurs fois, vous devez donc garder une trace de votre déplacement ou non.

+0

Merci beaucoup, c'est ce dont j'ai besoin! Maintenant, j'essaie de faire la même chose avec le menu contextuel, mais je n'arrive pas à trouver un message de fenêtre approprié pour l'attraper. Pouvez-vous me conseiller quelque chose? – Alexander

+0

@Alexander - Testé avec une application Delphi, les deux méthodes semblent fonctionner. Assurez-vous de passer le handle de votre fenêtre à 'TrackPopupMenu [ex]' pour le paramètre 'hwnd' car il indique la fenêtre qui recevra les messages. –

Questions connexes