Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/10/2012, 15h09   #1
stunton
Invité de passage
 
Inscription : septembre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 5
Points : 1
Points : 1
Par défaut DestroyWindow et plusieurs fenêtres

Bonjour,

j'ai un problème avec la fonction Win32 DestroyWindow()

Voici mon problème dans les grandes lignes :
J'ai créé deux fenêtres avec CreateWindowExW et je souhaite supprimer la première car
elle ne m'est plus d'aucune utilité.
Je fais donc DestroyWindow(hWin1) et il me détruit la deuxième aussi...


Voici des extraits de mon code (c'est du C openGL avec wgl seulement) :
ma Window Class a les styles suivants
Code :
1
2
UI_windowClass.style = CS_HREDRAW | CS_VREDRAW;
Ma première fenêtre vide et non-affichée est créée comme cela :
Code :
1
2
3
4
5
6
UI_hDummy = CreateWindowExW(
	(WS_EX_APPWINDOW),
	L"UI_WindowClass",L"",
	(WS_TILEDWINDOW),20,40,
	40,40, (HWND) 0,0,	GetModuleHandleW(0),0);
Ensuite, avant de créer la deuxième fenêtre, je détruis la première :
Code :
1
2
DestroyWindow(hWin); // hWin = UI_hDummy
Puis je crée la seconde :
Code :
1
2
3
4
5
6
7
8
9
10
UI_hWindow = CreateWindowExW(
	(WS_EX_APPWINDOW|WS_EX_ACCEPTFILES),
	L"UI_WindowClass",L"",
	(WS_TILEDWINDOW|WS_VSCROLL),20,40,
	(int) (scaleXY * 640),(int) (scaleXY * 480),
	(HWND) parentwindowhwnd,0,
	GetModuleHandleW(0),0);
ShowWindow(UI_hWindow, SW_SHOW);
UpdateWindow(UI_hWindow);
Je crée la scène OpenGL et le rendu se fait deux ou trois fois puis la fenêtre se
ferme du fait du DestroyWindow.

Si je fais sans DestroyWindow tout se passe bien, mais
j'aimerais comprendre pourquoi la deuxième fenêtre se ferme alors
qu'elle n'existait même pas avant le DestroyWindow ?

edit : pour info, c'est une application console qui lance une fenêtre OpenGL (en fait deux).
stunton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2012, 17h18   #2
stunton
Invité de passage
 
Inscription : septembre 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 5
Points : 1
Points : 1
Bon je pense que j'ai trouvé le problème, même si je ne comprends pas pourquoi il y a autant de latence après le DestroyWindow.

Sur msdn, il est écrit que lors d'un DestroyWindow un message WM_QUIT est envoyé et que celui-ci provoque le retour d'un zéro (FALSE) par la fonction GetMessage.
Fonction qui est utilisée après la création de la deuxième fenêtre .

Ce qui est bizarre, c'est que le message WM_QUIT est envoyé bien avant la création de la deuxième fenêtre et encore plus avant GetMessage qui en plus recoit d'autre message entre-temps... Bizarre, bizarre...

Edit :
ça y est .
Le problème venait de la WindowProcedure et de la gestion des messages. Les deux fenêtres utilisent la même procédure de fenêtre avec
Code :
1
2
3
case WM_DESTROY:
	PostQuitMessage(0);
Maintenant je test pour savoir quelle fenêtre est détruite et si c'est la première je n'exécute pas PostQuitMessage.
My bad .
stunton est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h48.


 
 
 
 
Partenaires

Hébergement Web