Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1173 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°33500
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 21-05-2001 à 17:00:55  profilanswer
 

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]

mood
Publicité
Posté le 21-05-2001 à 17:00:55  profilanswer
 

n°33501
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 21-05-2001 à 17:04:21  profilanswer
 

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 !

n°33503
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 21-05-2001 à 17:21:08  profilanswer
 

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...

n°33505
Amadeus
Posté le 21-05-2001 à 17:22:47  profilanswer
 

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 !



n°33508
petoulachi
A fortiori, brigadier chef
Posté le 21-05-2001 à 17:30:31  profilanswer
 

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

n°33509
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 21-05-2001 à 17:32:53  profilanswer
 

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 !!

n°33519
Amadeus
Posté le 21-05-2001 à 18:20:29  profilanswer
 

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 !!



n°33527
gilou
Modérateur
Modzilla
Posté le 21-05-2001 à 18:55:11  profilanswer
 

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é!  --
n°33529
Amadeus
Posté le 21-05-2001 à 19:06:10  profilanswer
 

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+,



n°33532
gilou
Modérateur
Modzilla
Posté le 21-05-2001 à 19:26:12  profilanswer
 

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é!  --
mood
Publicité
Posté le 21-05-2001 à 19:26:12  profilanswer
 

n°33533
Amadeus
Posté le 21-05-2001 à 19:35:18  profilanswer
 

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+,



n°33644
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 22-05-2001 à 10:26:00  profilanswer
 

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]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[Algo] Appli de traitement du sonmulti-threading en Visual C++
[Visual C++] LIBCD.lib(wincrt0.obj) : error LNK2001:[Visual Basic] probleme avec DriveListBox
ou puis-je trouver visual studio pro 6.00 ???Visual C++ serait il fou ?
Changer le port FTP en Visual C++Tutorial sur le multi-threading en Visual C++
Debutant pur en Visual c++visual c++ 6.0 : lancer un fichier htm??
Plus de sujets relatifs à : [Visual C++] pourquoi mon appli ne se termine pas ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR