tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
413
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Padd_y Padd_y ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    Hallo..
    Ich versuche gerade vergeblich, zu begreifen, was da vor sich geht..

    In der InitInstance-Methode meiner von CWinApp abgeleiteten Hauptklasse gebe ich zunächst erfolgreich eine Messagebox aus:

    MessageBox(0,"Boxtext","Start-Infos",MB_OK);

    Danach übergebe ich die Steuerung an das erste Window: (wird alles ja standardmäßig so vom Class-Wizard erzeugt)

    int nResponse = dlg.DoModal();

    Nun möchte ich zur Beendigung des Programmes nochmals eine MessageBox ausgeben.

    Geht aber nicht mehr. Es passiert einfach nichts, eine weitere MessageBox-Anweisung wird nicht angezeigt.

    Der Returncode ist übrigens '1'. Allerdings liefert die funktionierende MessageBox ebenfalls '1'.
    Hilft also nicht weiter.

    Versteht das jemand ?
    Danke
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    wenn das Hauptfenster der Applikation zerstört wird, wird auch gleichzeitig der Thread der Applikation beendet. Alle danach noch erzeugten Fenster werden dadurch sofort wieder zerstört. Du kannst das Problem umgehen, wenn du die Zeile:
    Code cpp:
    1
    
    m_pMainWnd = &dlg;
    entfernst bzw. auskommentierst.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Padd_y Padd_y ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    32
    Besten Dank für den schnellen Tipp - klappt

    Nachvollziehen kann ich das Ganze zwar nicht, aber man muß ja nicht alles verstehen..
    ..schließlich hat das Objekt 'dlg' eine längere Lebensdauer.
    Code :
    1
    2
    3
    4
    5
    
    CAskShiDlg dlg(&db);
    m_pMainWnd = &dlg; 
    MessageBox(0,"Boxtext1","Start-Infos",MB_OK);
    int nResponse = dlg.DoModal();
    MessageBox(0,"Boxtext2","Ende-Infos",MB_OK);

    Zum Zeitpunkt der zweiten Messagebox existiert 'dlg' nach meinem Einblick in den Debugger immer noch.
    Es ist ja auch die gleiche Klammerebene. Das Verschwinden kann, da 'dlg' ja nicht mit 'new' angelegt wurde,
    m.E. doch erst nach Verlassen der Klammerebene (bzw. hier InitInstance) geschehen.

    Wenn das Funktionieren der MessageBox also von 'dlg' abhängen sollte (was ich auch nicht erwartet hätte),
    dann müßte es nach meinem Verständnis auch nach DoModal() noch möglich sein, da 'dlg' noch existiert.

    Aber ich bin halt Anfänger.. wollte das aber trotzdem noch loswerden
     

  4. #4
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von Padd_y Beitrag anzeigen
    ..schließlich hat das Objekt 'dlg' eine längere Lebensdauer.
    Das Objekt existiert schon noch, aber das dazugehörende Fenster nicht mehr; und darum geht es.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  5. #5
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Ist aber doch nicht so ganz logisch, da das Dialogfenster vor dem Aufruf von DoModal auch noch nicht existiert.
     

  6. #6
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Unbedingt logisch ist die MFC nicht in jedem Fall
    In der MSDN steht zumindest: Wenn der Applikationsklasse ein Hauptfenster zugewiesen wurde (m_pMainWnd = ...) und dieses zerstört wird, werden alle danach angelegten Fenster sofort wieder platt gemacht. Warum das so sein muss und was genau dahintersteckt, weiß ich nicht.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

Ähnliche Themen

  1. [SUSE 10.2] lvm findetLaufwerk aber es ist nicht nutzbar
    Von mc_gulasch im Forum Linux & Unix
    Antworten: 5
    Letzter Beitrag: 02.12.07, 15:11
  2. XP startet nicht mehr nach SP2 Update
    Von andycage im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 18.05.05, 09:58
  3. Bildergalerie nach Webspacewechsel nicht mehr!
    Von urbantrooper im Forum PHP
    Antworten: 2
    Letzter Beitrag: 19.04.05, 09:10
  4. JTextField nicht nutzbar, wohl ein Panel Problem? (Ich vs. GUI)
    Von wissensdurstig im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 16.04.05, 21:26
  5. Antworten: 4
    Letzter Beitrag: 22.10.04, 11:27