Programm schließt aber Prozess bleibt..



  • OK....Bin neu im Forum also entschuldigung falls Das der Falsche Platz für meine Frage ist...

    Ich fange gerade erst an mich mit visual c++ und der winapi zu beschäftigen
    Also dachte ich mir Hey, erstell doch erstmal einfach ein leeres Fenster. Gesagt, getan aber wenn ich das leere Fenster wieder schließe geht zwar das Fenster zu, aber der Prozess bleibt und muss manuell im Taskmanager geschlossen werden...
    Ist simpel aber ich komm nich drauf was ich falsch mache....
    Danke im voraus

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch (msg)
       {
       case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(window, msg, wParam, lParam);
    }
    
    /****************************************************************************************************************************************************************************************/
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
    {
    static int xSize=400;
    static int ySize=500;
    static char klasse[]="fenster";
    
    WNDCLASSEX wncx;
    HWND window;
    MSG msg;
    
    wncx.cbSize=sizeof(wncx);
    wncx.style=CS_HREDRAW|CS_VREDRAW;
    wncx.lpfnWndProc=WndProc;
    wncx.cbClsExtra=0;
    wncx.cbWndExtra=0;
    wncx.hInstance=hInstance;
    wncx.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wncx.hCursor=LoadCursor(NULL,IDC_ARROW);
    wncx.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
    wncx.lpszMenuName=0;
    wncx.lpszClassName=klasse;
    wncx.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
    
    RegisterClassEx(&wncx);
    
    window=CreateWindow(klasse,
    					"reaktion",
    					WS_OVERLAPPEDWINDOW^WS_MAXIMIZEBOX^WS_SIZEBOX|WS_VISIBLE,	
    					CW_USEDEFAULT,CW_USEDEFAULT,
    					xSize,ySize,
    					NULL,
    					NULL,
    					hInstance,
    					NULL
    					);
    
    ShowWindow(window,nCmdShow);
    UpdateWindow(window);
    
    while(GetMessage(&msg,window,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    
    return 0;
    }
    


  • GetMessage(&msg,window,0,0) wird nich reagieren auf PostQuitMessage weil PostQuitMessage sendet WM_QUIT nach Thread Queue (mit hwnd=0).
    Deine GetMessage Funktion erwartet NUR window messages.

    while (GetMessage(&msg,0,0,0))
    

    oder

    while (IsWindow(window) && GetMessage(&msg,window,0,0))
    


  • Na bitte, Das wars 👍
    Danke für die schnelle Antwort und die Erklärung!
    rinnjehustet!


Anmelden zum Antworten