Zum Inhalt springen

MFC - Dokument schließen


Technician

Empfohlene Beiträge

Originally posted by Guybrush Threepwood

Hi,

hast du schon DestroyWindow() ausprobiert?

Gruß

Guybrush

jetzt eben ;)

DestroyWindow() führt zu einem "Die Anweisung ... verweist auf Speicher..."



void CMeinProgrammView::OnInitialUpdate()

{

	CFormView::OnInitialUpdate();

	ResizeParentToFit();


	if(wert>5)

	{

	int yesno = MessageBox(messText,  "Wert größer 5", MB_YESNO|MB_ICONEXCLAMATION);

		if(yesno == IDNO)

		{


			[b]//fenster schließen[/b]



		}


	}


Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Klotzkopp

Ich weiß nicht, was "wert" ist, und wann es gültige Daten enthält,

Das ist in diesem Fall egal; ich kann theoretisch hier jede Bedingung einsetzen (was ich eben im Programm brauche).

Originally posted by Klotzkopp

aber OnInitialUpdate ist ein wenig zu spät, um den Fensteraufbau abzubrechen.

Kannst Du die MessageBox eventuell auch schon in PreCreateWindow anzeigen? Da müsstest Du nur FALSE zurückgeben.

PreCreateWindow geht allerdings auch nicht --> "wert" kommt nämlich aus dem Doc und ist nicht in der View selbst enthalten...

Im Doc abzubrechen, scheint IMHO aber auch nicht zu gehen, da ich ja erst mal die Benutzerauswahl mittels MessageBox brauche...

:confused:

Technician

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Willst du nur das Fenster wieder schließen oder die ganze Anwendung beenden?

Nur das Fenster schließen - nicht die Anwendung!

Der Benutzer soll, wenn er "Nein" gewählt hat (und dadurch das Fenster geschlossen wurde), wieder ein Fenster aufmachen können. So wie in Word, wenn kein Dokument geöffnet ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Guybrush Threepwood

Und du kannst nicht irgendwie das Fensterobjekt an die Funktionübergeben

und dann damit CloseWindow() aufrufen?

Wenn ich

this->CloseWindow();

in der OnInitialUpdate() mache, wird das Fenster minimiert - CloseWindow schließt es nicht, sondern mimimiert es nur.

Das ist nicht, was ich erreichen möchte.

Außerdem kann man dann mit dem miminierten Fenster "herummalen", wenn ich es also verschiebe, werden's immer mehr (ich glaub, ihr kennt den Effekt...:rolleyes: ) - und das sollte wohl auch nicht sein...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Klotzkopp

Aber wenn Du in CMeinProgrammView::OnInitialUpdate an "wert" herankommst, sollte es in CMeinProgrammView::PreCreateWindow doch auch gehen...

... wenn ich mir "wert" in PreCreateWindow hole, gibt's dann wieder (genau an der Stelle wo ich mir wert hole) ein hübsches "Die Anweisung in ... verweist auf..." :(

wert wird übrigens in CMeinProgrammDoc::OnOpenDocument(LPCTSTR lpszPathName) angelegt (wenn das was hilft)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Originally posted by Klotzkopp

Dann gib die MessageBox doch da aus, und mach bei IDNO einfach return FALSE.

Ich hab jetzt den Code eingefügt:



if(wert>5)

	{

	int yesno = MessageBox(messText,  "Wert größer 5", MB_YESNO|MB_ICONEXCLAMATION);

		if(yesno == IDNO)

		{


	                    return FALSE;	


		}


	}


Aber mit "MessageBox" scheint er hier nix anfangen zu können - Compiler-Fehler:

error C2660: 'MessageBoxA' : Funktion akzeptiert keine 3 Parameter

Was hat das zu bedeuten?!

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jede Viewklasse ist von CWnd abgeleitet, also kannst Du

int CWnd::MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );

verwenden. Dokumentklassen sind nicht von CWnd abgeleitet, also brauchst Du die WinAPI-MessageBox:

int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );

In Deinem Fall sähe das so aus:

int yesno = MessageBox( AfxGetMainWnd()->GetSafeHwnd(), messText, "Wert größer 5", MB_YESNO|MB_ICONEXCLAMATION);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der "standart" MessageBox Befehl sieht so aus:


int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
[/PHP]

In den MFC kann man ihn aber auch als Methode von CWindow oder CWnd ohne den

ersten Parameter aufrufen, dann muß man aber das Objekt einer solchen (oder davon

abgeleiteten) Klasse angeben.

Ich hab aber gerade auch gesehen das du dass auch ohne Objekt ein paar Posts weiter

oben gemacht hast, warum das ging weiß ich nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...