by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 2007
-
29 mai 2005 à 16:27
by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 2007
-
29 mai 2005 à 20:55
Slut tout le monde!!
J'ai posté une question sur le forum, que j'ai en partie réussi à
résoudre... Mais il me reste un tout petit problème, le but étant
depuis une fenêtre principal, ouvrir une deuxième fenêtre depuis un
bouton.
La deuxième fenêtre s'ouvre tout à fait normalement, mais le problème
est que lorsque je la ferme, en cliquant sur la petite croix, ça ferme
tout le programme. Est ce que quelqu'un aurait la gentillesse de
m'aider??
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 mai 2005 à 17:05
Pour commencer tu enregistres deux classes identiques, ca ne sert a
rien, autant n'en utiliser qu'une seule. Quand tu fermes une fenêtre,
tu appelles PostQuitMessage(0); c'est pour ca que ton programme se
termine (n'utilise PostQuitMessage que pour la fenêtre principale)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 mai 2005 à 20:33
ProcedureDeFenetre est un procédure, tu en crée une autre identique que
tu appelles ProcedureDeFenetre2 par exemple, et dans celle la tu
enleves case WM_DESTROY et ce qui suit.
Si tu es débutant la dedans, je te conseille de lire le livre de petzold que tu trouves ici:
by_rabbit_08
Messages postés109Date d'inscriptionvendredi 8 avril 2005StatutMembreDernière intervention15 mai 20071 29 mai 2005 à 20:43
MERCI!! J'ai enfin réussi!!!!! je suis un homme heureux!!! lol
Mais il me reste un dernier problème, lorsque j'ouvre la deuxième
fenêtre, et que je la ferme, ça joue, mais si je veux la réouvrir en
cliquant à nouveau sur le bouton, ça ne marche pas !!!! Est-ce que tu saurais pourquoi??
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 29 mai 2005 à 20:51
Parce que tu t'y prend mal: au début tu crée la 2eme fenetre qui est
invisible est quand tu clique sur le bouton tu la rend visible
(ShowWindow). Mais quand tu la ferme, ca la détruit donc après
ShowWindow ne marchera pas puisque le fenêtre n'existe plus. Il faut
que tu crée la fenêtre seulement quand tu clique sur le bouton. Tu
remplace donc le ShowWindow... par le CreateWindow.
Ce que tu peux faire autrement c'est que quand tu recois WM_DESTROY
pour le deuximème fenêtre, tu la cache à ce moment la au lei de la
détruire et donc tu gardes le ShowWindow
#define ID_BOUTON 100
#define ID_BOUTON2 101
#include
LRESULT CALLBACK ProcedureDeFenetre (HWND,UINT,WPARAM,LPARAM); //prototype de la fonction de traitement des messages
LRESULT CALLBACK ProcedureDeFenetre2 (HWND,UINT,WPARAM,LPARAM); //prototype de la fonction de traitement des messages
HWND Fenetre2;
HINSTANCE hInstance2;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hInstancePrecedente,PSTR LigneDeCommande,int ModeAffichage)
{
char NomProgramme[ ] = "premier test";
char NomProgramme2[ ] = "deuxieme fenetre";
HWND Fenetre; //le type HWND définit un type HANDLE
HWND bouton, bouton2;
MSG Message;
WNDCLASSEX ClasseFenetre;
WNDCLASSEX DeuxFenetre;
//HINSTANCE hInstance2;
ClasseFenetre.cbSize =sizeof(ClasseFenetre);
ClasseFenetre.style = CS_HREDRAW|CS_VREDRAW;
ClasseFenetre.lpfnWndProc =ProcedureDeFenetre;
ClasseFenetre.cbClsExtra =0;
ClasseFenetre.cbWndExtra =0;
ClasseFenetre.hInstance =hInstance;
ClasseFenetre.hIcon =LoadIcon(0,IDI_APPLICATION); //LoadIcon charge un identificateur d'icone
ClasseFenetre.hCursor =LoadCursor(0,IDC_ARROW); //LoadCursor charge un identificateur de curseur
ClasseFenetre.hbrBackground =CreateSolidBrush(RGB(255,255,255)); //définit le fond d'écran de la fenêtre