pourquoi mon appli ne se termine pas ? [Visual C++] - Programmation
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 !
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...
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 ! |
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 ?
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 !!
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 !! |
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+,
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+, |
Marsh Posté le 21-05-2001 à 19:26:12
C'est pas grave, la DefWindowProc devrait s'en charger, il me semble, non?
A+,
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+, |
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]
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 !
//////// 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]