problème avec DialogBox - C++ - Programmation
Marsh Posté le 09-06-2006 à 15:31:17
sans voir ton code, non, on est pas voyants extralucides.
Marsh Posté le 09-06-2006 à 15:50:44
Désolé....
bon voila :
mon fichier ressource:
Code :
|
mon fichier console.h
Code :
|
mon fichier console.cpp
Code :
|
et puis j'apelle le tout comme ça :
Code :
|
Merci de me prendre en charge
Marsh Posté le 09-06-2006 à 16:06:59
non, il ne sort pas d'erreur.
DialogBox() me renvoie bien le code donné par EndDialog() (j'ai bien changé le 0 que j'avais mis dans EndDialog() par un autre chiffre. 0 étant le message d'erreur d'un handle de fenêtre parente invalide)
Marsh Posté le 09-06-2006 à 16:13:57
et euh, tu mets "Console" en paramètre de DialogBox, en lieu et place du paramètre UINT Message ? Y'aurait pas comme un souci ?
Marsh Posté le 09-06-2006 à 16:14:26
J'ai l'impression qu'il faudrait que tu vérifies tes entrées et tes sorties plus globalement dans ton programme, avec la doc ouverte à coté de ton IDE, ca risque de pas faire de mal.
Marsh Posté le 09-06-2006 à 16:29:59
Le hWnd correspond bien au hWnd de la fenêtre parente ? Passe le à NULL sinon
Marsh Posté le 09-06-2006 à 16:36:33
heu je suis désolé mais j'avoue ne pas comprendre (je suis un débutant...) Quand je regarde le Platform SDK il me donne ça :
Code :
|
et puis il dit que "lpTemplate" est un pointeur vers une chaine de caractère terminé par le caractère nul ou un entier... Donc ça me paraissait cohérent avec ce que j'avais fait.
et puis je l'avais appris là : http://chgi.developpez.com/windows/dialogue/
en ce qui concerne ta deuxième remarque j'avoue ne pas comprendre aussi (désolé... ). En ce qui conserne mon IDE c'est Visual C++ Express edition... donc tu me conseille de voir MSDN ... mais je doit aller voir quoi ?
Marsh Posté le 09-06-2006 à 16:42:33
heu mon dernier message était pour _darkalt3_ (je met 3 heures a taper )
Merci harkonnen de t'intéresser a mon cas ...
Marsh Posté le 09-06-2006 à 16:43:27
Code :
|
ou
Code :
|
MSDN c'est en général pour bien vérifer le type de tes paramètres et les valeurs de retour, c'est une référence.
Marsh Posté le 09-06-2006 à 16:52:46
heu je comprend pas pourquoi tu dit "ou" c'est pas les même et elles ont pas le même role...
DialogBox() c'est pour créer la boite de dialogue et DialogProc() pour écouter les messages... je suis bien conscient que c'est pas moi qui va t'apprendre quelque chose mais je comprend pas ta remarque...
Marsh Posté le 09-06-2006 à 16:58:50
au temps pour moi
vraiment dsl, j'ai pas fait gaffe
Marsh Posté le 09-06-2006 à 17:04:03
tu sais passer avec le debugger dans la méthode de création de ta console et voir ce qui s'y trame ?
Marsh Posté le 09-06-2006 à 17:47:48
Bon j'ai trouvé sur Google comment utiliser le debugger mais par contre ils ont l'air de dire que visual intègre par defaut les info nécéssaire au débuggage dans l'exécutable. Or quand je lance le debugger il me dit qu'il ne trouve pas d'info de débuggage pour mon programme ... Vous sauriez comment on l'active ?
Merci
Marsh Posté le 09-06-2006 à 20:56:41
il faut compiler le soft en debug (par défaut sous l'ide a partir de visual 2005), selectionner les lignes ou le programme s'arrete avec F9 (plusieurs lignes à selectionner si nécessaire), lancer le debug avec F5, une fois breaké, continuer avec F10 et entrer dans la ou les fonctions de la ligne en cours avec F11
Une fois le programme stoppé en debug pendant son execution, tu peux consulter la valeur de telle ou telle variable, espionner la mémoire, etc. Tout est dans les menu, genre affichage / fenetre de debug, etc.
le debugger est ton ami
Marsh Posté le 09-06-2006 à 21:17:00
Amonchakai a écrit : heu mon dernier message était pour _darkalt3_ (je met 3 heures a taper ) |
tu pourrais poster la totalité de ton code stp, j'ai la flemme de créer un projet Win32 pour tester
edit: laisse tomber, je vais utiliser le squelette de developpez.com
Marsh Posté le 09-06-2006 à 21:22:49
ouais non finalement poste tout, ça compile pas du 1er coup
Marsh Posté le 09-06-2006 à 21:30:21
Harko, l'humanité te doit beaucoup
Marsh Posté le 09-06-2006 à 21:55:52
pourquoi ?
Marsh Posté le 10-06-2006 à 08:11:30
ben tester (souvent à ce que je crois lire) le code d'autrui pour l'aider à débugger, c'est plutot super sympa il me semble
Marsh Posté le 10-06-2006 à 10:16:57
MERCI Harkonnen !!!
Bon alors voilà mon code :
main.cpp
Code :
|
main.h
Code :
|
bon j'ai pas absolument tout mis mais j'ai essayé avec ça et déjà j'ai le problème...
(a noter que dans la méthode DialogProc() j'ai changé le EndDialog(hwnd, 0); par EndDialog(hwnd, 32); )
en tout cas Merci
ps : Merci aussi a NeHe dont on reconnaitrera son code pour la génération d'une fenêtre openGL....
Marsh Posté le 10-06-2006 à 10:31:50
Merci de ton explication du debugger _darkalt3_ mais c'est bien ce que j'avais trouvé sur Google...
le problème c'est que quand j'appuis sur F5 il me sort : "No Debugging Information" et là il me demande si je veux continuer si je met oui a côte de mes breakpoints il y a un panneau attention qui dit "the breakpoint will not currently be hit, no symbol have been loaded for this document"
Donc je doute que mon programme soit compilé en mode Debug...
je suis allé voir dans le menu build mais je vois pas où on peut l'activer...
Marsh Posté le 10-06-2006 à 11:24:39
_darkalt3_ a écrit : ben tester (souvent à ce que je crois lire) le code d'autrui pour l'aider à débugger, c'est plutot super sympa il me semble |
merci
en fait, j'aime bien tester quand je vois du code qui n'a aucune raison de ne pas fonctionner, ce qui est le cas ici
Amonchakai a écrit : MERCI Harkonnen !!! |
bon alors j'ai testé (sous VS 2005), ça marche nickel en mode debug, mais en mode release j'ai effectivement le comportement que tu décris
la suite quand j'aurais pris ma douche, généralement je trouve beaucoup de réponses à mes questions en me lavant les cheveux
tu utilises quel logiciel pour compiler ? Dev C++ ? Visual Studio ? Code::Blocks ?
Marsh Posté le 10-06-2006 à 12:08:37
j'ai trouvé
évidemment j'ai regardé partout, sauf dans le fichier le plus court : le console.cpp
tu sais pourquoi ça bloque ? parce qu'à part WM_INITDIALOG et WM_COMMAND, ta Dialog ne traite aucun autre message ! et figure toi que des messages, elle en reçoit plein, dont le fameux WM_PAINT qui permet de redessiner la fenêtre et que tu ne traites pas !
pas besoin de rajouter une clause case pour chaque message, sinon t'es encore là demain. t'as juste qu'à dire à ta boite que si elle reçoit un message qu'elle ne traite pas, alors elle laisse le système le traiter pour elle. pour ce faire, rajoute ceci dans ta clause default: de ton fichier console.cpp :
Code :
|
comme ça, tous les autres messages que tu ne traites pas seront traités par la procédure de fenêtre par défaut
ah et tant que j'y suis, ça serait bien de traiter le WM_DESTROY aussi, si tu veux éviter les leaks
ce qui nous donne pour le fichier console.cpp :
Code :
|
et là ça marche nickel
j'te laisse, mon cassoulet va refroidir
edit: c'est le genre de truc totalement indétectable avec un debugger
Marsh Posté le 09-06-2006 à 15:21:26
Bonjour, bon alors actuellement je fais un petit jeu en openGL et je crée la fenêtre a partir de l'API Win32.
Mais voilà, je veux créer une console et pour celà j'avais voulu utiliser une boite de dialogue. Jusque là pas de problème : le crée le fichier ressource, et ma fonction DialogProc()... et au moment où j'appelle DialogBox() j'ai la boite de dialogue qui se crée mais je vois juste le bouton "Ok" et tout le reste est invisible... Deplus l'utilisation de mon CPU passe de 0 a 100%. mais par contre quand je clique sur Ok elle se ferme bien et l'utilisation de l'UC retourne a 0%. Vous auriez une idée de ce qui se passe ??? car j'avoue que là je sèche....
Merci