Fenster schließen & wieder öffnen



  • Hi
    Ich hab ein Programm mit 2 Fenstern.
    Wenn ich auf Fenster "A" auf einen Button Klicke, soll Fenster "B" angezeigt werden. In Fenster "B" wird dann etwas eingegeben, und wieder Geschlossen. Allerdings kann ich dann Fenster "B" Nicht ein 2. mal öffnen. (Erst, wenn ich das Ganze Programm neu Starte.

    Wie kann ich also Fenster "B" Schließen, damit ich es später nochmal öffnen kann??

    Folgende 3 Möglcihkeiten hab ich schon ausprobiert, aber nix geht

    //In WM_DESTROY:
    ShowWindow(hWnd_AddItem, SW_HIDE);
    DestroyWindow(hWnd_AddItem);
    PostQuitMessage(0);
    


  • nicht schliessen im sinne von zerstören. sondern nur verstecken 😉

    ShowWindow(hWnd_B, SW_HIDE);
    


  • GEHT NICHT!!
    Hab ich schon versucht
    ... Aber egal was, es muss in WM_DESTROY, oder??



  • Hab ich evtl am Anfang schon was falsch??

    //Fenster wird erstellt
    hWnd_additem = CreateWindow(szAppNameAI, "AddItem", WS_OVERLAPPEDWINDOW, 100, 120, 400, 195, NULL, NULL, hInstance, NULL);
    
    //Fenster wird geöffnet (Irgenwo in WM_COMMAND)
    ShowWindow(hWnd_additem, SW_NORMAL);
    UpdateWindow(hWnd_additem);
    


  • RedEagle schrieb:

    ... Aber egal was, es muss in WM_DESTROY, oder??

    nein sonst müsstest du jedesmal wenn du ein neues fenster haben möchtest dieses erstellen.

    RedEagle schrieb:

    Hab ich evtl am Anfang schon was falsch??

    vermutlich

    1. alle fenster erstellen (register und createwindow, etc)
    [vermutung] fenster b sollte keine x btn haben sondern wahrscheinlich nur
    ok und abruch
    2. fenster b hiden
    3. fenster a anzeigen
    4. fenster a btn click (WM_COMMAND)
    5. showwindow fenster b
    6. nach der aktion fenster wieder verstecken --> btn click auf ok --> showwindow
    7. und wieder zu 4.



  • aha Prinzip verstanden, geht aber trotzdem nicht :(:(
    Jetzt hab' ich's so:

    //WinMain:
    ShowWindow(hWnd_additem, SW_HIDE);
    UpdateWindow(hWnd_additem);
    
    //Fenster "A"
    //WM_COMMAND
    case ID_ADDITEM:
    { 
    ShowWindow(hWnd_additem, SW_NORMAL);
    break;
    }
    
    //Fentser "B":
    //WM_COMMAND
    case IDCANCEL: //Programm schließen ( [×] )
    {
     ShowWindow(hWnd_AddItem, SW_HIDE);
     break;
    }
    

    Geht nicht :(:(



  • EDIT: Hab mich verguckt 😉



  • LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    
    switch (message)
    {
     case WM_COMMAND:
     {
      switch(LOWORD(wParam))
      {
       case ID_IRGENDWAS:
       {
        //Mach irgendwas
        break;
       }
      }
      break;
     }
    }
    

    Aber daran kanns doch nicht liegen, oder??

    [edit]

    masterofx32 schrieb:

    EDIT: Hab mich verguckt 😉

    ...
    [/edit]



  • ein click auf das x zerstört dein fenster.
    entweder den button deativieren
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/windows/WindowReference/WindowStyles.asp
    oder auf dialogboxen umsteigen, IMHO besser.



  • Das [×] Kommt sowiso wech. (Mache "WS_CAPTION" und mehr nicht)
    ABER: Wenn ich ShowWindow() bei WM_COMMAND benutze, bzw irgendeine Andere Funktion (um das Fenster zu schließen) außer PostQuitMessage(0); tut sich garnichts

    bsp.:

    case ID_ADD: 
    {
     AddItem(); //Funktioniert
     ShowWindow(hWnd_AddItem, SW_HIDE); //Wird nicht ausgeführt, bzw Fenster bleibt sichtbar
     break;
    }
    


  • hmm, und woher hast du dein hWnd_AddItem?



  • masterofx32 schrieb:

    hmm, und woher hast du dein hWnd_AddItem?

    mmmm ... Wende so fragst 😃

    hWnd_AddItem = CreateWindow(szAppNameAI, szAppName, WS_OVERLAPPEDWINDOW, 100, 120, 400, 195, NULL, NULL, hInstance, NULL);
    

    ABER

    LRESULT CALLBACK WndProc_AddItem(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    

    ok, damit Fehler gefunden & gelöst 😉

    DANKE


Anmelden zum Antworten