Raccourcis des menus & IsDialogMessage

Résolu
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 26 déc. 2004 à 05:28
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 26 déc. 2004 à 17:58
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

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 déc. 2004 à 16:26
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)
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
26 déc. 2004 à 09:45
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)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2004 à 12:34
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++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
26 déc. 2004 à 13:45
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2004 à 13:57
J'ai pris ton zip, je verrai des que possible.

ciao...
BruNews, MVP VC++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
26 déc. 2004 à 14:12
Ok je vire alors. AlexMAN si tu le veux aussi, envoie moi un MP ;-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2004 à 14:39
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++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
26 déc. 2004 à 14:55
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 ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 déc. 2004 à 15:06
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++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
26 déc. 2004 à 15:14
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 ;-)
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
26 déc. 2004 à 17:58
Ah, merci pour cette piste intéressante !
0
Rejoignez-nous