Technician Geschrieben 8. November 2002 Geschrieben 8. November 2002 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 Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Hi, hast du schon DestroyWindow() ausprobiert? Gruß Guybrush Zitieren
Technician Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 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] } } Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Also ich kenn mich mit den MFC nicht so aus aber kannst du der Funktion nicht irgendwie einen Verweis auf dein Fenster geben? Zitieren
Klotzkopp Geschrieben 8. November 2002 Geschrieben 8. November 2002 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. Zitieren
Technician Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 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 Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Willst du nur das Fenster wieder schließen oder die ganze Anwendung beenden? Zitieren
Technician Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 Und du kannst nicht irgendwie das Fensterobjekt an die Funktionübergeben und dann damit CloseWindow() aufrufen? Zitieren
Technician Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 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... Zitieren
Klotzkopp Geschrieben 8. November 2002 Geschrieben 8. November 2002 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... Zitieren
Technician Geschrieben 8. November 2002 Autor Geschrieben 8. November 2002 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) Zitieren
Klotzkopp Geschrieben 8. November 2002 Geschrieben 8. November 2002 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. Zitieren
Guybrush Threepwood Geschrieben 8. November 2002 Geschrieben 8. November 2002 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? Zitieren
Technician Geschrieben 11. November 2002 Autor Geschrieben 11. November 2002 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: Zitieren
Guybrush Threepwood Geschrieben 11. November 2002 Geschrieben 11. November 2002 Du mußt als ersten Parameter noch das Fenster angeben dem die MessageBox gehört. Zitieren
Technician Geschrieben 11. November 2002 Autor Geschrieben 11. November 2002 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) Zitieren
Klotzkopp Geschrieben 11. November 2002 Geschrieben 11. November 2002 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); Zitieren
Technician Geschrieben 11. November 2002 Autor Geschrieben 11. November 2002 @Klotzkopp Da wär ich nie drauf gekommen! Danke Zitieren
Guybrush Threepwood Geschrieben 11. November 2002 Geschrieben 11. November 2002 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. Zitieren
Empfohlene Beiträge
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.