Dokument schließen

lukasS

Erfahrenes Mitglied
Hallo,

ich habe in meinem MDI-Projekt verschiedene Dokumente. Zudem habe ich noch Checkboxen mit den Dokumentnamen in meiner Symbolleiste. Wenn ich eine Checkbox deativiere, soll sich das entsprechende Dokument schließen, leider bekomme ich das Schließen nicht hin.

Also, wie schließt man jetzt ein Dokument? SendMessage(WM_CLOSE), Delete, Destroy,...? K. A.

Danke schonmal!

Lukas
 
SendMessage( WM_CLOSE ) sollte ausreichen. Hier kann es allerdings sein, wenn das Doc als modified gekennzeichnet ist, dass da eine MessageBox mit "Sind sie sicher, Änderungen gehen verloren" oder so ähnlich kommt. Das könntest du mit SetModifiedFlag( FALSE ) verhindern.
 
Also zu dem Dokument gehören ja einmal die CDocument und CFormView - Klassen. Die erste enthält nicht die Funktion SendMessage, bei View kommt ein "unhandled exception". Worauf muss ich hierbei achten?

Gruß

Lukas
 
Tschuldigung, nächstesmal sehe ich nach, bevor ich das Maul (bzw. die Finger) aufreisse:

Vom CDocument OnCloseDocument aufrufen. Der Hinweis mit dem SetModified bleibt aber :)
 
Hallo ich bin nicht ganz so erfahren im Umgang mit WinAPI. Habe das Problem das ich ein Programm beenden will was aber aus einem anderen Prg vorher aufgerufen wurde.
Dies geht auch soweit bis auf die Tatsache das zum Schluß noch eine "MessageBox" erscheint in der ich gefragt werde ob ich wirklich beenden will. Wie bekomme ich dieses Fenster geschlossen oder verhindert?

mein bisheriger Code:
int main(int argc, int *argv[])
{
HWND hWnd=FindWindow("TFormMain", 0);
SendMessage( hWnd, WM_CLOSE, 0, 0);
//Destroy Window//
}
 
Soviel ich weiß, geht das nur, wenn Du das Verhalten des zu schließenden Programmes verändern kannst.
Ist das zu schließende Programm von Dir, hast Du also den Quelltext davon?
Wenn ja, dann könntest du eine eigenen Nachricht, (z.B. WM_CLOSE_QIET) erzeugen , die Du an das Programm senden kannst. Dort legst Du dann eine Behandlungsroutine dafür an, die Das Programm ohne Nachfrage beendet.
Die Brachialmethode wäre natürlich, den Prozeß abzuschießen. Allerdings weiß ich nicht, wie das unter Windows geht.
EDIT:
Ich habe gerade gesehen daß es da http://www.tutorials.de/tutorials181021.html einen Thread zum Abschießen eines Prozesses gibt.
 
Zuletzt bearbeitet:
Hmm, kannst du nicht das WM_CLOSE umgehen und direkt DestroyWindow aufrufen?
 
@jokey2
Danke Dir der Link ist nicht schlecht aber leider muß das Programm vor dem beenden noch einen Wert in der Registry setzen. Damit ist es einfach zu brutal weg...
Deinen ersten Vorschlag werde ich gleich einmal austesten....
 
Zurück