tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1529
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    J1M1 J1M1 ist offline Mitglied Gold
    Registriert seit
    Mar 2005
    Beiträge
    131
    Hallo!

    Erstellt man in Visual Studio 2005 (weil mir immer wieder welche sagen wollen, dass es die folgende Unterstützung überhaupt gar nicht gibt ^_^: ) eine Applikation basierend auf "Mehrere Dokumente der höchsten Ebene" und Doc/View, so gehe man zur Funktion CMainFrame::LoadFrame().
    Dort kann man folgenden Code sehen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
        // replace Exit option on File menu with Close for secondary windows
        /*if (AfxGetApp()->m_pMainWnd != this)
        {
            CMenu *pMenu = GetMenu();
            ASSERT(pMenu);
            pMenu->ModifyMenu(ID_APP_EXIT, MF_BYCOMMAND | MF_STRING, ID_FILE_CLOSE, _T("&Close"));
        }*/

    Wenn man "/*" und "*/" entfernt, so wird der "Kommentar" zum Programmcode und wird ausgeführt. (Klar.) Es ersetzt bei weiteren Objekten von CMainFrame den Menüeintrag "Exit" mit "Close". Und wenn man nun auf diesen Menüeintrag klickt, wird nicht die ganze Applikation beendet, sondern lediglich nur das Fenster geschlossen.

    Interessant ist aber, dass dies nicht nur bei sekundären Fenstern klappt. Ändert man folgende Zeile:
    Code :
    1
    
    if (AfxGetApp()->m_pMainWnd != this)
    in
    Code :
    1
    
    if (AfxGetApp()->m_pMainWnd == this)
    um, so wird auch im ersten und einzigen (das heißt, es ist wirklich kein einziges weiteres Fenster geöffnet) der Menüeintrag "Exit" in "Close" umgeändert. Wenn man nun auf "Close", wird tatsächlich auch nur das Fenster geschlossen! Denn: Das (einzige) Fenster ist nicht mehr vorhanden, doch im Taskmanager ist der Prozess noch da.

    Die Frage nun: Welche Funktion wird denn aufgerufen, wenn man nun auf "Close" klickt? Diese könnte nämlich ganz nützlich sein und das ganze Dilemma lösen, dass beim Ausführen von "DestroyWindow()" (welche ich als einzige Funktion kenne, die mir ermöglicht ein Fenster zu schließen) nicht nur das Fenster geschlossen wird, sondern auch die ganze Applikation geschlossen wird.

    J!M!
     

  2. #2
    CodeFlatter CodeFlatter ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    36
    Hallo,

    normal muss nur die Methode "OnClose" überschrieben werden, dann kann man selber festlegen was beim Klick auf [X] passieren soll.
    Hat die Anwendung dann aber kein weiteres Fenster mehr offen und ist auch kein Icon im Systray abgelegt, bleibt der Prozess aber quasi hängen, da ja jegliche Kommunikationsschnittstelle fehlt. Die Nachricht, die zu OnClose gehört ist - nicht anders zu erwarten WM_CLOSE.

    Neben OnClode kann OnDestroy überschrieben werden, beide werden beim schliessen der App aufgerufen. OnClose als direkte Reaktion auf [X] und OnDestroy nach dem das Fenster bereits abgebaut wurde.

    Gruß René
     
    Es gibt immer einen Weg ...
    --------------------------------------------------------------------
    Plugins für unterschiedliche Plattformen, ein Code?
    http://www.codeproject.com/dll/multi...plugin_spl.asp

Ähnliche Themen

  1. Swing Fenster per Button schließen, NICHT das Programm beenden
    Von Markus im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 23.06.09, 12:53
  2. fenster schließen ohne link/knopf
    Von Hammurabi im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 11.10.07, 15:55
  3. Miranda IM - Fenster ohne Verlauf zu löschen schließen
    Von stain im Forum Internetkommunikation
    Antworten: 2
    Letzter Beitrag: 02.04.07, 12:22
  4. Fenster ohne Schließen-Taste in der Titelleiste
    Von General Hunter im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 10.07.05, 18:37
  5. Antworten: 3
    Letzter Beitrag: 24.03.05, 12:09