C/C++ SOUS WINDOWS SANS MFC - TUTORIAL 2 : ECRITURE DANS UNE FENETRE

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 19 janv. 2006 à 00:07
akadis Messages postés 2 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 12 octobre 2007 - 12 oct. 2007 à 00:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35642-c-c-sous-windows-sans-mfc-tutorial-2-ecriture-dans-une-fenetre

akadis Messages postés 2 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 12 octobre 2007
12 oct. 2007 à 00:56
Dans la boucle d'écoute des évènements si on remplace le
while (GetMessage(&MessagesAEnvoyer, hFenetre, 0, 0))
par
while (GetMessage(&MessagesAEnvoyer, NULL, 0, 0))
Ca résoud le problème :)
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
11 oct. 2007 à 22:50
Bonsoir, il y a un moment maintenant que j'avais écrit ce code, essaies de voir ce que cela donne en enlevant les return 0 de la partie des traitement des messages.
Ainsi, le retour de boucle se fera en renvoyant les paramètres DefWinProc.
akadis Messages postés 2 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 12 octobre 2007
11 oct. 2007 à 17:23
Bonjour, je travaille sous Visual C++ et je rencontre aussi ce problème. C'est à dire que lorsque je ferme la fenêtre soit en cliquant sur la croix, soit en cliquant sur l'icône puis en faisant Fermer, la fenêtre disparait mais le processus tourne toujours.
Existe t'il un façon "propre" (sans killer le processus) pour terminer l'application ?
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
15 avril 2007 à 18:07
Bonjour, cela veut il dire que la fenêtre se ferme, mais que le programme tourne toujours et apparait encore de ce fait dans les processus actifs de Windows ?
tennisdev44 Messages postés 1 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 15 avril 2007
15 avril 2007 à 07:23
Bonjour,
Quand je place PostQuitMessage(0) dans WM_DESTROY, le programme ne se ferme pas complètement. Quand je le met dans WM_CLOSE ça ne change rien...
Je travaille sous dev c++ en projet Win 32 GUI


Sauriez vous pourquoi le programme ne se ferme pas complètement?
Chubab Messages postés 11 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 19 mai 2009
11 mai 2006 à 22:14
Merci BruNews,
j'ai trouver le probleme...c'est pcq PostQuitMessage(0) est dans WM_DESTROY alors quil devrait etre dans WM_CLOSE!
Et voila!,
Chubab!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2006 à 20:56
La forme générale de la pompe à message est:

while(GetMessage(&msg, 0, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

Si tu as PostQuitMessage(0); de correctement mis alors ça sort à tout coup.
Variable 'stop' est absolument à supprimer.
Chubab Messages postés 11 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 19 mai 2009
11 mai 2006 à 20:09
salut! jai reussi à compiler! je ne savais tout simplement pas que nous devions etre dans un project win32! dsl!

quand je nutilise pas while(!stop) par contre jessaye de fermer le programme...mais il continue a rouler dans le background et prend tout mon cpu(ce qui nest pas le cas avant que je passe par WM_DESTROY)...je dois ensuite le fermer a laide de ctrl-alt-del...

quelqu'un sait pourquoi??
Merci,
CHUBAB!
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2006 à 10:07
Faut faire un projet Win App GUI et non pas console.
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
11 mai 2006 à 02:14
salut. Ne travaillant pas avec le C++.Net, si c'est avec cette version que tu as des problèmes, je ne vois pas trop d'où cela peut venir. D'après le message d'erreur, on dirait qu'il faille que tu enlèves des fichiers intermédiaires (peut être des fichier générés automatiquement lors de la création de ton appli et entrant en conflit avec #include <windows.h> du programme) encore que je n'en soit pas sûr.
Sinon, le tutorial 1 est à l'adresse suivante :
http://www.cppfrance.com/codes/CPLUSPLUS-SOUS-WINDOWS-SANS-MFC-TUTORIAL_24022.aspx
A+
Chubab Messages postés 11 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 19 mai 2009
10 mai 2006 à 04:44
jai bien aimé cette source, mais j'ai toujours la même erreur quand je build ce programme dans visual studio....

Deleting intermediate files and output files for project 'win app - Win32 Debug'.
--------------------Configuration: win app - Win32 Debug--------------------
Compiling...
win app.cpp
Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/win app.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

win app.exe - 2 error(s), 0 warning(s)

Savez-vous pourquoi??...Merci!

PS: j'aimerais voir le premier tutoriel aussi...je ne le trouve pas...
hugues7E5 Messages postés 12 Date d'inscription jeudi 30 novembre 2000 Statut Membre Dernière intervention 29 janvier 2006
29 janv. 2006 à 19:03
toujours simpa de lire tes tutos, mais heureusement que BruNews est là pour corriger les erreurs!

Apres correction, ça marche.

Merci.
cs_LaPatoshe Messages postés 53 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 19 décembre 2009
19 janv. 2006 à 02:32
salut. En fait, j'ai repris l'ancien listing du tuto 1 et effectivement, m^me si le prog fonctionne comme ça, il y a quelques trucs qui peuvent sauter aux yeux de par leur inutilité et le gaspillage de ressources qu'ils entrainent (while stop par exemple). Pour ce qui est de hFenetre, j'ai directement utilisé le Handle de la fenêtre crée et non son paramètre passé en WinProc. C'est vrai qu'il semble beaucoup plus logique d'utiliser le paramètre hWnd.
Dès que j'aurai une minute ou deux, je ferai une petite mise à jour.
A+
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 janv. 2006 à 02:26
L'idée est bonne mais il y a des ptit problème à regarder :( Bon te reste qu'a suivre les conseils de brubru et d'éventuel autres posteurs. Je reviendrai voir plus tard.

A+
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 janv. 2006 à 00:07
hDC = GetWindowDC(hFenetre); que fait cela ici ???
PAINTSTRUCT Ps;
hDC = BeginPaint(hFenetre, &Ps);
d'où vient ce 'hFenetre' ??? c'est hwnd, 1er param de la winProc.

Quand on traite WM_PAINT on ne repasse pas à DefWindowProc() mais on retourne 0.

while (!stop) ??? Ouate Isis ??? (en english...)
à changer en:
while(GetMessage(....)) {
TranslateMessage(...);
DispatchMessage(...);
}

A remanier en profondeur.
Rejoignez-nous