| |||||
| Dernière réponse | |
|---|---|
| Sujet : [Visual C++] pourquoi mon appli ne se termine pas ? | |
| Moustaaki | 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] |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| Moustaaki | 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] |
| Amadeus | 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 | C'est pas grave, la DefWindowProc devrait s'en charger, il me semble, non?
A+, |
| Amadeus | 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 | 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+, |
| Amadeus | 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 | 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 !! |
| petoulachi | putain les noms de variables et de fonction. y z'auraient pas pu choisir plus simple ? :crazy: |
| Amadeus | 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 | 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... |
| Moustaaki | 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 ! |
| Moustaaki | 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] |




