Au secours !!!!!!!!!!!!!!!!!!!!!!!!!!!!

Signaler
Messages postés
22
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
16 juillet 2005
-
Messages postés
100
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 juin 2003
-
Salut tout le monde !
Alors en fait je bosse sur Visual .NET;
je crée ma fenêtre avec CreateWindow( ... ) etc, mais le pb, c'est que quand je ferme mon programme, il est encore présent dans le gestionnaire des tâches de Windows (Ctrl + Alt + Suppr) !
Comment faire je vous en supplie, je sens que je vais me suicider !
A plus

13 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Salut,
faut voir ta proc de fenetre et la boucle
while(GetMessage(...)
doit venir de la.
ciao...
Messages postés
22
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
16 juillet 2005

Ouais je vais voir ça
En fait moi c'est pas GetMessage( ... ) mais PeekMessage( ... ) car c'est une application Direct3D
Merci
Je reviendrai si ça marche tjs pas :)
Messages postés
22
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
16 juillet 2005

Non non j'ai tout regardé ça marche tjs pas !
J'ai même crée un projet pour comparer avec le miens, et c'est le même code !
J'en ai vraiment marre !!!!!!!!!!!!!!!
Help !!!!!!!
Messages postés
64
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
7 mars 2003

> Non non j'ai tout regardé ça marche tjs pas !
> J'ai même crée un projet pour comparer avec le miens, et c'est le même code !
> J'en ai vraiment marre !!!!!!!!!!!!!!!
> Help !!!!!!!

Un peu de ton code (WinMain et WndProc +
création/enregistrement de la fenêtre) ne ferait pas de mal...

Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
pose un MessageBox bidon a un endroit vers sortie. Si tu obtiens tu le pousses + loin, tu verras ainsi quand tu ne l'as plus.
Messages postés
22
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
16 juillet 2005

Voilà le code

LRESULT CALLBACK WindowProcess( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_KEYDOWN :
{
switch( wParam )
{
case VK_ESCAPE :
DestroyWindow( hWnd );
break;
}
}
case WM_DESTROY :
{
PostQuitMessage( 0 );
break;
}
default :
return( DefWindowProc( hWnd, message, wParam, lParam ) );
}

return( FALSE );
}

bool InitInstance( HINSTANCE hInst, int mode )
{
hWnd = CreateWindow( "Moteur", "Moteur", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL );

if( !hWnd ) return FALSE;

ShowWindow( hWnd, mode );
UpdateWindow( hWnd );

return TRUE;
}

ATOM EnregistrerClasse( HINSTANCE hInst )
{
WNDCLASSEX wndClasse;

wndClasse.cbSize		= sizeof( WNDCLASSEX ); 
wndClasse.style			= CS_HREDRAW | CS_VREDRAW;
wndClasse.lpfnWndProc	= ( WNDPROC )WindowProcess;
wndClasse.cbClsExtra	= 0;
wndClasse.cbWndExtra	= 0;
wndClasse.hInstance		= hInst;
wndClasse.hIcon			= NULL;
wndClasse.hCursor		= LoadCursor( NULL, IDC_ARROW );
wndClasse.hbrBackground	= ( HBRUSH )( COLOR_WINDOW+1 );
wndClasse.lpszMenuName	= "Moteur";
wndClasse.lpszClassName	= "Moteur";
wndClasse.hIconSm		= NULL;

return( RegisterClassEx( &wndClasse ) );
}

int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int mode )
{
LONGLONG t0, t;
float dt, ft;

if( !EnregistrerClasse( hInst ) )
{
return( FALSE );
}

if( !InitInstance( hInst, mode ) )
{
return( FALSE );
}

CompteurTemps( t0, ft );

PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE );
while( msg.message != WM_DESTROY )
{
if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
if( CompteurTemps( t0, ft ) )
QueryPerformanceCounter( ( LARGE_INTEGER * ) &t );
else
t = GetTickCount();
dt = ( t - t0 ) * ft;
t0 = t;
}
}

UnregisterClass( "Moteur", hInst );

return( int( ( msg.wParam ) ) );
}


Merci de votre aide
Messages postés
64
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
7 mars 2003

>PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE );
>while( msg.message != WM_DESTROY )
>{

>if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
>{
> TranslateMessage( &msg );
> DispatchMessage( &msg );
>}
>else
>{
> if( CompteurTemps( t0, ft ) )
> QueryPerformanceCounter( ( LARGE_INTEGER * ) &t );
> else
> t = GetTickCount();
> dt = ( t - t0 ) * ft;
> t0 = t;
>}
>UnregisterClass( "Moteur", hInst );
>return( int( ( msg.wParam ) ) );
> }

Mmmm.. je suis pas sûr, mais essaie ceci :

=========================================
while(true)
{

if (PeekMessage(&msg, 0,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;

TranslateMessage(&msg);
DispatchMessage(&msg);
}

//ta routine principale va ici

}

//ici, ta fenêtre agonise, il est temps de détruire tes objets

return msg.wParam;

//ta fenêtre est morte
=========================================

Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware
Messages postés
22
Date d'inscription
samedi 1 septembre 2001
Statut
Membre
Dernière intervention
16 juillet 2005

Non non j'ai essayé ton truc cela ne change rien !
:(((((((((
Messages postés
100
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 juin 2003

PostQuitMessage(0); à la fin
Messages postés
64
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
7 mars 2003

> PostQuitMessage(0); à la fin
>

PostQuitMessage() se met habituellement dans le case WM_DESTROY du WndProc

(de msdn)
This function indicates to Windows that a thread has made a request to terminate (quit). The PostQuitMessage function posts a WM_QUIT message to the thread's message queue and returns immediately; the function simply indicates to the system that the thread is requesting to quit at some time in the future.

> > > while(true)
> > > {
> > >
> > > if (PeekMessage(&msg, 0,0,0,PM_REMOVE))
> > > {
> > > if (msg.message == WM_QUIT)
> > > break;
> > >
> > > TranslateMessage(&msg);
> > > DispatchMessage(&msg);
> > > }
> > >
> > > //ta routine principale va ici
> > >
> > > }
> > >
> > > //ici, ta fenêtre agonise, il est temps de détruire tes objets
> > >
> > > return msg.wParam;
> > >
> > > //ta fenêtre est morte
> > >

Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware
Messages postés
100
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 juin 2003

Bon ok, déjà le test pour sortir du prog ca devrait etre avec WM_QUIT et pas WM_DESTROY sinon il fera jamais le PostQuitMessage quoi que tu en dises c'est ca j'ai déja eu le cas
nemmezis remplace while( msg.message != WM_DESTROY )
par while( msg.message != WM_QUIT) et tout rentrera dans l'ordre
Messages postés
64
Date d'inscription
dimanche 9 février 2003
Statut
Membre
Dernière intervention
7 mars 2003

> > > > > while(true)
> > > > > {
> > > > >
> > > > > if (PeekMessage(&msg, 0,0,0,PM_REMOVE))
> > > > > {
> > > > > if (msg.message == WM_QUIT)
> > > > > break;
> > > > >
> > > > > TranslateMessage(&msg);
> > > > > DispatchMessage(&msg);
> > > > > }
> > > > >
> > > > > //ta routine principale va ici
> > > > >
> > > > > }
> > > > >
> > > > > //ici, ta fenêtre agonise, il est temps de détruire tes objets
> > > > >
> > > > > return msg.wParam;
> > > > >
> > > > > //ta fenêtre est morte
> > > > >

> > > PostQuitMessage(0); à la fin
> > >

> >
> >
> > PostQuitMessage() se met habituellement dans le case WM_DESTROY du WndProc
> >
> > (de msdn)
> > This function indicates to Windows that a thread has made a request to terminate (quit). The PostQuitMessage function posts a WM_QUIT message to the thread's message queue and returns immediately; the function simply indicates to the system that the thread is requesting to quit at some time in the future.
> >
> >

> Bon ok, déjà le test pour sortir du prog ca devrait etre avec
>WM_QUIT et pas WM_DESTROY sinon il fera jamais le
>PostQuitMessage quoi que tu en dises c'est ca j'ai déja eu
>le cas

C'est ça que j'ai dis :

if (msg.message == WM_QUIT)
break;

> nemmezis remplace while( msg.message !=
>WM_DESTROY )
> par while( msg.message != WM_QUIT) et tout rentrera
>dans l'ordre

Je ne crois pas, car c'était ma suggestion, mais le problème n'a pas été réglé.

Jonathan Mcdougal
Montréal, Québec
mcdougalljonathan@hotmail.com
http://www.multimania.com/utopiasoftware
Messages postés
100
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 juin 2003

C'est qu'il a du mal testé car avec son test on ne passe jamais dans le case WM_DESTROY du switch puisqu'on se casse avant, et c'est bien le PostQuitMessage qui fait disparaitre de la fenetre des processus en execution