Discussion:
Anwendung beenden
(zu alt für eine Antwort)
franc walter
2008-07-26 18:08:19 UTC
Permalink
Hallo,
ich bin Anfänger in C++ und arbeite mit Visual Studio 2005.
Jetzt will ich per Tastendruck eine Anwendung (BarClock) beenden mit:
...
AfxGetApp()->ExitInstance()
AfxWinTerm();
...
dann krieg ich aber einen Fehler:

Unbehandelte Ausnahme bei 0x004b8a65 in BarClock.exe: 0xC0000005:
Zugriffsverletzung beim Lesen an Position 0xfeeefef2.

Wenn ich debugge, bemerke ich, dass der Fehler in
CBarClockApp::ExitInstance()
delete m_pBarClockWnd;
auftritt.
Wie beende ich denn einfach eine C++ MFC-Anwendung, bei Visual Basic ging
das so schön leicht mit Unload(Form)?

Danke,
franc
Martin Richter [MVP]
2008-07-27 13:15:59 UTC
Permalink
Hallo franc walter!
Post by franc walter
Wie beende ich denn einfach eine C++ MFC-Anwendung, bei Visual Basic ging
das so schön leicht mit Unload(Form)?
Einfach das Main Window durch DestroyWindow zerstören!
Bei einer Dialog basierenden Anwendung einfach EndDialog aufrufen.
--
Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com
franc walter
2008-07-27 23:14:04 UTC
Permalink
Post by Martin Richter [MVP]
Einfach das Main Window durch DestroyWindow zerstören!
Bei einer Dialog basierenden Anwendung einfach EndDialog aufrufen.
Hallo,

also ich finde keine Funktion DestroyWindow.
Ich habe eine Zeile, wo das Hauptfenster initialisiert wird, die heisst:

CBarClockApp theApp;

und wenn ich mir dieses "theApp" mit "AfxGetApp()" hole, wird mir kein
DestroyWindow angeboten:

error C2039: 'DestroyWindow': Ist kein Element von 'CWinApp'
Martin Richter [MVP]
2008-07-28 06:07:26 UTC
Permalink
Hallo franc walter!
Post by franc walter
CBarClockApp theApp;
und wenn ich mir dieses "theApp" mit "AfxGetApp()" hole, wird mir kein
Du musst das Haupotfenster Deiner Applikation zerstören.
AfxGetMainWnd()->DestroyWindow()

Von wo aus willst Du denn die Anwendung zerstören.
Hast Du einen speziellen Handler in dem das passieren soll?
--
Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com
franc walter
2008-07-28 16:28:05 UTC
Permalink
Post by Martin Richter [MVP]
Du musst das Haupotfenster Deiner Applikation zerstören.
AfxGetMainWnd()->DestroyWindow()
Hurra, ja das klappt. Danke!

Gruss franc
Thomas
2008-07-28 05:09:36 UTC
Permalink
Hallo Frank

Bei CWinApp Nachkommen wirst Du kein DestroyWindow finden.

Du kannst entweder DestroyWindow aus der WinAPI verwenden und das Handle
Deines Hauptfensters übergeben:

::DestroyWindow(m_pBarClockWnd->m_hWnd);

Oder Du versuchset es mit:

m_pBarClockWnd->DestroyWindow();

Das ganze sollte an der Stelle sitzen, wo Du auf Dein Tastenereignis
reagierst.

An sonsten würde ich ein Buch zur MFC empfehlen. Für Einsteiger ist die MFC
nicht unbedingt einsichtig und auch u.U. erscheint das Framework zu
kompliziert. Du könntest natürlich auch Windows Forms verwenden...

Gruß

Thomas
Post by franc walter
also ich finde keine Funktion DestroyWindow.
CBarClockApp theApp;
und wenn ich mir dieses "theApp" mit "AfxGetApp()" hole, wird mir kein
error C2039: 'DestroyWindow': Ist kein Element von 'CWinApp'
franc walter
2008-07-28 16:31:21 UTC
Permalink
Post by Thomas
An sonsten würde ich ein Buch zur MFC empfehlen. Für Einsteiger ist die MFC
nicht unbedingt einsichtig und auch u.U. erscheint das Framework zu
kompliziert.
Ja, ich hab schon mal ein paar Übungen durchgemacht (Scribble usw.), ganz
schön verschachtelt die Gute.

Aber jetzt mit

AfxGetMainWnd()->DestroyWindow();

gehts zu Ende, gut.

Guido Franzke
2008-07-28 13:00:18 UTC
Permalink
Schonmal folgendes versucht?

AfxGetMainWnd()->SendMessage(WM_CLOSE);
franc walter
2008-07-28 16:28:56 UTC
Permalink
Post by Guido Franzke
Schonmal folgendes versucht?
AfxGetMainWnd()->SendMessage(WM_CLOSE);
Danke,

AfxGetMainWnd()->DestroyWindow();

funktioniert prächtig.
Lesen Sie weiter auf narkive:
Loading...