[Visual C++] pourquoi mon appli ne se termine pas ?

pourquoi mon appli ne se termine pas ? [Visual C++] - Programmation

Marsh Posté le 21-05-2001 à 17:00:55    

J'ai bien cherché et rien, pas trouvé. Alors si quelqu'un a une idée, elle serait la bienvenue.
 
Je suis obligé de faire CtrlAltSup pour fermer mon appli. Pourtant j'ai repris la boucle de la fin sur une doc .. c'est bien elle qui détermine si l'application doit se finir ?
Est ce que mon probleme peut avoir un rapport avec la procedure WncProc ? selon ce qu'elle renvoie ? quelle valeur doit-elle renvoyer pour etre sur que l'application se termine convenablement ?  
 
d'avance, merci !     :jap:  
 
//////// debut du code ///////
#include <stdio.h>
#include <windows.h>
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
#define NOM_APPLICATION "Traducteur Play/NIFF/SCORE"
 
int WINAPI   WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow)
{    
 
     HWND         hwnd ;
     MSG          msg ;
  //classe de fenetre
     WNDCLASS     wndclass ;
        wndclass.style = CS_HREDRAW|CS_VREDRAW ;            
        wndclass.lpfnWndProc   = WndProc ;   wndclass.cbClsExtra    = 0 ;     wndclass.cbWndExtra    = 0 ;    
        wndclass.hInstance     = hInstance ;    
        wndclass.hIcon         = LoadIcone                       (NULL,IDI_APPLICATION) ;
        wndclass.hCursor       = LoadCursor (NULL,IDC_ARROW) ;
        wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH) ;
 
wndclass.lpszMenuName  = "IDR_MENU1" ; // C'est là qu'on associe le menu
     wndclass.lpszClassName = NOM_APPLICATION ; //nom que nous attribuons a la classe de fenêtre
 
  //créer la classe de fenêtre et la sauvegarder sous ce nom
     RegisterClass (&wndclass);
     
 
 
  //creer la fenêtre a partir de notre classe de fenêtre
     hwnd = CreateWindow (wndclass.lpszClassName,            // nom de la classe de fenêtre pour créer notre fenêtre
                          "oh, la belle fenetre !",            // titre de la fenêtre
                          WS_OVERLAPPEDWINDOW,        // style de la fenêtre (ici superposable)
                          CW_USEDEFAULT,              // position initiale coin superieur gauche en X
                          CW_USEDEFAULT,              // position initiale coin superieur gauche en y
                          CW_USEDEFAULT,              // largeur de départ
                          CW_USEDEFAULT,              // hauteur de départ
                          NULL,                       // pas de fenêtre parente
                          NULL,                       // menu par défaut (ce n'est pas la barre de menu)
                          hInstance,                  // a quel programme est relié notre fenêtre
                          NULL) ;                     // données de création
     
  //afficher la fenêtre
   
     ShowWindow (hwnd, nCmdShow);
 
  //mettre son contenu à jour
     UpdateWindow (hwnd) ;
     
  //tant qu'on a pas le message WM_QUIT  
     while (GetMessage (&msg,
   NULL, //handle de la fenêtre, il est à NULL dont on aura les messages de toutes les fenetres de l'application
   0, //valeur minimum...
   0)) //et maximum des messages que l'ont veut (s'il l'ont en veut qu'une partie)
     {
     //traduire les données du message pour qu'elles soient lisible
          TranslateMessage (&msg) ;
    //envoyer le message à Windows qui le transmettra à WINDOWPROC
          DispatchMessage (&msg) ;
     }
 
  //on envoie une valeur indiquant la fin du programme au système
     return msg.wParam ;
}
 
 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // des tas de trucs que je ne vous met pas pour pas faire un  post de 20 km
}

 

[edit]--Message édité par Moustaaki--[/edit]

Reply

Marsh Posté le 21-05-2001 à 17:00:55   

Reply

Marsh Posté le 21-05-2001 à 17:04:21    

Désolé, le code est un peu long mais j'ai vraiment besoin d'aide, là. je suis allé sur le site de msdn, j'ai suivi la création de fenetre avec son menu pas à pas et là, je vois pas...
 
Y a t'il des subtilité au niveau du nom de "l'appel" de la ressource menu ?
 
c'est du visual C++ 6, au fait !

Reply

Marsh Posté le 21-05-2001 à 17:21:08    

au lieu de donner le nom de la ressource (comme spécifié dans la doc msdn !), il faut en fait utiliser MAKINTRESOURCE(int entier) ;
 
entier designant l'identifiant du menu dans le resource.h.
 
fallait le trouver !
 
et en fait, c'est comme avec Borland !
 
 
 
///////////////////
 
Maintenant, j'ai un autre problem !!!
 
mon programme ne se termine pas lorsque je quitte la fenetre, je suis obligé de faire Ctrl+Alt+Sup pour le finir. ça doit venir de la fin du prog, dans la boucle while...

Reply

Marsh Posté le 21-05-2001 à 17:22:47    

Voilà : tu inclues to header resource.h
#include "resource.h"
ensuite tu remplaces la ligne  
wndclass.lpszMenuName  = "IDR_MENU1" ; // C'est là qu'on associe le menu  
par :
wndclass.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1) ; // C'est là qu'on associe le menu
 
Je suppose bien entendu que t'a créé ton menu avec l'editeur de ressource et qui tu l'as appelé IDR_MENU1
A+
 

Moustaaki a écrit a écrit :

Désolé, le code est un peu long mais j'ai vraiment besoin d'aide, là. je suis allé sur le site de msdn, j'ai suivi la création de fenetre avec son menu pas à pas et là, je vois pas...
 
Y a t'il des subtilité au niveau du nom de "l'appel" de la ressource menu ?
 
c'est du visual C++ 6, au fait !



Reply

Marsh Posté le 21-05-2001 à 17:30:31    

putain les noms de variables et de fonction. y z'auraient pas pu choisir plus simple ? :crazy:

Reply

Marsh Posté le 21-05-2001 à 17:32:53    

ouai, j'aime bien le MAKEINTRESOURCE, c'est sympa mais t'as vu le bordel que c'est pour faire une fenetre !!
vive le java !!

Reply

Marsh Posté le 21-05-2001 à 18:20:29    

Mais bon faut être patient avec java :) tout a un prix y compris lers perf.
Sinon ton app. ne termine quand tu clique sur x parceque t'a pas implémenté d'énenment close dans ton wndproc:
case WM_CLOSE:
     PostQuitMessage(0);
     break;
 

Moustaaki a écrit a écrit :

ouai, j'aime bien le MAKEINTRESOURCE, c'est sympa mais t'as vu le bordel que c'est pour faire une fenetre !!
vive le java !!



Reply

Marsh Posté le 21-05-2001 à 18:55:11    

Amadeus,
Etant donne qu'il donne pas le code de sa Wndproc, comment peux tu savoir qu'il ne traite pas le WM_CLOSE ?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-05-2001 à 19:06:10    

En fait il a édité son message car ds la 1ère version il avait:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)  
{  
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
il a du rajouté des trucs entre temps et selon toute vraisemblace le traitement de WM_CLOSE n'en fait pas partie :)
 

gilou a écrit a écrit :

Amadeus,
Etant donne qu'il donne pas le code de sa Wndproc, comment peux tu savoir qu'il ne traite pas le WM_CLOSE ?
A+,



Reply

Marsh Posté le 21-05-2001 à 19:26:12    

C'est pas grave, la DefWindowProc devrait s'en charger, il me semble, non?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-05-2001 à 19:26:12   

Reply

Marsh Posté le 21-05-2001 à 19:35:18    

Non la def ne le fait pas, penses aux applis critiques ou celles qui doivent sauvegarde des trucs avant de quitter : c'est donc au programmeur de gérer tout ça.
 

gilou a écrit a écrit :

C'est pas grave, la DefWindowProc devrait s'en charger, il me semble, non?
A+,



Reply

Marsh Posté le 22-05-2001 à 10:26:00    

Merci pour le tuyau, c'était bien ça !
 :)
 
j'avais uniquement fait un WM_DESTROY et ça suffisait pas apparement

 

[edit]--Message édité par Moustaaki--[/edit]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed