Veröffentlicht 8. November 200222 j Hallo, wie schließe ich das gerade aktuelle Formular? Wenn im OnInitialUpdate() der View eine bestimmte Bedingung wahr ist, so soll das Fenster nicht mehr weiter aufgebaut, sondern geschlossen werdne. Technician
8. November 200222 j 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] } }
8. November 200222 j Also ich kenn mich mit den MFC nicht so aus aber kannst du der Funktion nicht irgendwie einen Verweis auf dein Fenster geben?
8. November 200222 j Ich weiß nicht, was "wert" ist, und wann es gültige Daten enthält, 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.
8. November 200222 j 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
8. November 200222 j 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.
8. November 200222 j Und du kannst nicht irgendwie das Fensterobjekt an die Funktionübergeben und dann damit CloseWindow() aufrufen?
8. November 200222 j 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... ) - und das sollte wohl auch nicht sein...
8. November 200222 j Originally posted by Technician PreCreateWindow geht allerdings auch nicht --> "wert" kommt nämlich aus dem Doc und ist nicht in der View selbst enthalten...Aber wenn Du in CMeinProgrammView::OnInitialUpdate an "wert" herankommst, sollte es in CMeinProgrammView::PreCreateWindow doch auch gehen...
8. November 200222 j 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)
8. November 200222 j Originally posted by Technician wert wird übrigens in CMeinProgrammDoc::OnOpenDocument(LPCTSTR lpszPathName) angelegt (wenn das was hilft) Dann gib die MessageBox doch da aus, und mach bei IDNO einfach return FALSE.
8. November 200222 j Du willst das Childwindow doch direkt beim erstellen schließen wenn ein bestimmter Wert gesetzt ist, oder? Kannst du das dann nicht in der Funktion CChildFrame::Create machen?
11. November 200222 j 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:
11. November 200222 j Du mußt als ersten Parameter noch das Fenster angeben dem die MessageBox gehört.
11. November 200222 j Originally posted by Guybrush Threepwood Du mußt als ersten Parameter noch das Fenster angeben dem die MessageBox gehört. und wie sieht dieser Parameter aus?! :confused: Die View hat ein Document, aber das Document hat doch keine View?!! (Der Code steht im Document, bei OnOpenDocument)
11. November 200222 j 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);
11. November 200222 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.