non modal window schließen
-
Ich erzeuge ein nicht modales Fenster. Nun möchte ich es wieder
schließen... Mache ich das so richtig?#include "meinfenster.h" //... //im aufruf: meinfenster* m_pMyDlgPtr; if(anaus==1) { //fenster anzeigen m_pMyDlgPtr = new CMyDialog; m_pMyDlgPtr->Create(IDD_DIALOG3); m_pMyDlgPtr->ShowWindow(SW_SHOWNORMAL); } else if(anaus==0) { //fenster wieder schließen m_pMyDlgPtr->DestroyWindow(); }Ich meine, kann ich einfach DestroyWindow() so aufrufen, oder könnte mir
das noch Probleme bereiten?
-
So sollte es eher funktionieren..
wartefenster* m_pMyDlgPtr; m_pMyDlgPtr = new wartefenster; if(wanaus==1) { m_pMyDlgPtr->Create(IDD_DIALOG3); m_pMyDlgPtr->ShowWindow(SW_SHOWNORMAL); } else if(wanaus==0) { m_pMyDlgPtr->DestroyWindow(); }Wenn nun mein Hauptdialog (dialogbasierte Anw.) noch arbeitet und
quasi gesperrt ist, wird dann offenbar auch mein nicht modaler Dialog
mit eingefroren

Ich möchte auch, dass der Hauptdialog nicht mehr manipuliert werden kann.
Das stört mich also weniger, aber im nicht modalen wollte ich eigentlich
sowas wie einen Hinweis über den Status bringen "Program is still working....".Evtl. noch mit einem Bild, das ich alle 2 Sekunden ändere.
Kann mir jemand erklären warum der nicht modale ebenfalls nicht mehr brauchbar ist?
Ich kann den ja schlecht in einen Thread packen, er soll ja nur 1x geöffnet werden.

-
Das wäre eine Möglichkeit zum Schließen:
HWND f=::FindWindow(NULL,"fenstername"); ::SendMessage(f,WM_CLOSE,NULL,NULL);
-
Ich habe deine Idee mal aufgegriffen, da ich etwas ähnliches in einer
Anwendung benötigen werde.Und zwar werden bei mir mehrere Laufwerke durchsucht. Das kann durchaus
mal etwas länger dauern.Nun hab ich auch mal einen nicht modalen Dialog aufgerufen. Bei mir
bleibt er ebenfalls, während das Hauptfenster noch arbeitet, inaktiv
und wird nicht neu gezeichnet.Vielleicht kann jemand etwas zum Thema beitragen? Ein Thread in der
Hauptanwendung wäre noch eine Idee. Man erzeugt erst das nicht modale Fenster
und updatet es dann über den Thread der Hauptanwendung.Könnte doch funktionieren?!?
-
Ich glaube ich habe die Lösung, wenn es denn noch jemanden interessiert
Ist aber ungetestet...2 Threads im Hauptdialog anlegen. Der erste muss mit SendMessage
immer wieder ein Ereignis im zweiten Dialog auslösen, das z.B.
ein Bild im zweiten Dialog wechselt.Der zweite Thread im Hauptdialog muss die eigentliche Arbeit
verrichten, die im Hauptdialog ausgeführt werden soll.
Nun sollte man aber entweder den zweiten Dialog modal erzeugen, oder
aber im hautpdialog die BUttons disablend, die nicht nochmals gedrückt
werden dürfen, solange die Threads noch laufen.Ist der Thread der Hauptanwendung nun fertig, kann er den zweiten Thread
ebenfalls beenden.