Raccourcis des menus & IsDialogMessage [Résolu]

Signaler
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
-
Bonjour,

Lorsque j'utilise IsDialogMessage dans ma pompe à messages, les raccourcis correspondant à mon menu ne sont pas traités. Voici le code de la pompe en question :
while (GetMessage(&msg, NULL, 0, 0) > 0) {
if (IsDialogMessage(hWnd, &msg) == 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

Rien de très original donc. J'utilise les ressources pour créer un menu comme celui-ci :
MAINMENU MENU
BEGIN
POPUP "&Fichier"
BEGIN
MENUITEM "&Quitter", ITEMQUIT
END
POPUP "&Aide"
BEGIN
MENUITEM "A &propos...", ITEMABOUT
END
END

Lorsque que je supprime l'appel à IsDialogMessage, les raccourcis (ALT+F et ALT+A) sont traités correctement... Quid ?

11 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Créé ta dialog 'dynamikemen', a l'aide de DialogBoxIndirect(Param), c chiant, mais certainement moins ke de créer un fichier ressource a la main. Si tu veux des exemples, racpp utilise cette methode pour la creation de dialog, jete un coup d'oeil..

+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Bonjour,

Je veux pas dire de betises, mais utiliser IsDialogMessage() bloque la reception de certains messages, tel que WM_KEYDOWN, ce qui pourrait empecher l'utilisation de raccourci CLAVIER.
Voila ce que jen pense (je te conseille de poser la question sur le NG Visual C++, si tu ne peux pas, je le ferais pour toi).

++

+2(p - n)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Faudrait voir le contexte exact de ton prog pour repondre correctement.
Dans tous les cas, tu peux analyser ce qu'il y a dans ta struct msg juste dessous
while(GetMessage(&msg,....
et tu decides ainsi si tu fais la verif IsDialogMessage(...).

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ben j'ai aussi une table de raccourcis claviers qui eux, sont bien gérés (j'ai testé çà un peu après avoir posté ici), seuls les ALT+XXX correspondant aux menus sont ignorés.

J'ai mis les sources courantes de mon programme ici : http://athanatos.free.fr/temp/perso/Nebulog.zip

C'est juste une ébauche, évidemment compatible MinGW et MSVC... resource.rc contient bien sûr les ressources, main.c la pompe à messages, et wndproc.c le gestionnaire de messages.

Examiner la structure MSG je veux bien, mais je ne vois pas trop quoi tester pour décider d'appeler ou non IsDialogMessage :-/

Merci à vous deux pour votre aide :)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
J'ai pris ton zip, je verrai des que possible.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ok je vire alors. AlexMAN si tu le veux aussi, envoie moi un MP ;-)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
mais pourquoi mets-tu IsDialogMessage() avec le hWnd de la fenetre parent ???
Son param devrait etre un hDlg valide si tu en as un a lui passer.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ben justement, je ne fais pas de Dialog et cette fenêtre va accueillir plusieurs contrôles enfants, et l'appel à IsDialogMessage est là pour gérer les appuis sur TAB et autres (la doc dit qu'on peut passer un HWND pour que cette fenêtre se comporte comme une boîte de dialogue).

Si j'ai bien suivi, il faudrait que je crée une fenêtre fille sur laquelle je placerais mes autres contrôles, et c'est sur son HWND que je devrais appeler IsDialogMessage ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
ben oui, IsDialogMessage() est la pour controler les messages vers une eventuelle modeless dialog.

Pourquoi veux-tu reimplementer toute la logique d'une dialog ? si c'est de cela dont tu as besoin, fais carrement une dialog en fenetre mere, ça n'empeche pas du tout d'y mettre un menu et autres bidules.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Certes, c'est ce que j'envisageais aussi, mais sans éditeur de ressources c'est assez ardu de se lancer dans les Dialog... Y'a bien quelques tutoriaux sur le sujet sur Google, mais ils n'expliquent que des exemples simples sans donner d'explications générales :-/

En rouvrant Petzold j'ai vu un chapitre "menus et autres ressources", je vais le lire en espérant y trouver ce que je cherche. Si tu as de la doc sur ce sujet, je suis preneur ;-)
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ah, merci pour cette piste intéressante !