Modeless-Window erzeugen
-
Hallo zusammen
Ich möchte in meinem MFC-Projekt(Einfaches Dokument, MFC-Standard beim Start ein (modeless) Dialogfenster aufrufen, dass ich bereits in der Ressourcenansicht erstellt habe.
ich habe jetzt schon so viele Tutorials oder ähnliches bei meinem Projekt versucht zu implementieren, dass ich jetzt schon fast am verzweifeln bin...
Jetzt am Schluss habe ich mich mit diesem Tutorial versucht: http://winprog.org/tutorial/modeless_dialogs.html
Jetzt habe ich ein paar Fragen, Probleme oder Fehler:
- BOOL CALLBACK ToolDlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {} kommt normal ins ChildView.cpp?
- case WM_CREATE: existiert in meinem Dokument nicht, muss ich das über den laufen lassen oder kann ich die Funktionen auch in einen Eventhandler tun?
- muss oder soll ich den Fenstercode in einer externen Datei auslagern?
Das Fenster soll einfach beim Start direkt erscheinen. Wenn das dann endlich mal klappt müsste ich es auch neuzeichnen lassen können ( à la Invalidate(); und UpdateWindow(); )
wäre euch wirklich dankbar, wenn ihr mir ein wenig helfen könntet.
Gruss
Renzo
-
Erstell doch deinen Dialog wie immer, Also Dialogresource erstellen und ne Klasse zu deinem Dialog erstellen, dann erstellst du an der entsprechenden stelle wo du willst ein Object deiner DialogKlasse und Ertzeugst deinen Dialog mit Crate und fertig.
Oder hattest du was ganz spezielles vor?
-
also erste Sache ist, es gibt schon das vorgefertigte Fenster und ich will jetzt ein neues zusätzliches erstellen.
also beim erstellen der Klasse, kann ich dies in der ChildViw.h machen à la:
class CMeinDialog : public CDialog
{
was muss ich hier definieren?}
und dann im Programm (ChildView.cpp) mit
CMeinDialog dlg;
dlg.Create(IDD_DIALOG1, NULL);
dlg.ShowWindow(SW_SHOW);aufrufen?
ich wär schon mal froh, wenn überhaupt mal ein zweites Fenster erscheinen würde

-
Lass doch den Wizad den Dialog-Code erzeugen.
Erzeuge das Template, dann nimm den Wizad und lss die Klasse erzegen.Ansonsten benötigst Du nur einen Konstruktor in Deiner Dialog Klasse mehr nicht.
-
hab jetzt den Wizard gefunden
und eine Klasse dazu erstellt."kreieren" tue ich das jetzt wie vorher schon mal beschrieben:
CMeinDialog dlg; dlg.Create(IDD_DIALOG1, NULL); dlg.ShowWindow(SW_SHOW);das Fenster ist aber nur ein Bruchteil einer Sekunde offen

Jedenfalls habe ich jetzt mal bei einem Button ein Ereignishandler hinzugefügt, nun möchte ich, dass das Fenster offen bleibt, so lange man nicht auf diesen Button gedrückt hat.Wie kann ich das sofortige Schliessen verhindern und es dann manuell (im Handler) "zerstören"?
-
Hallo,
für einen modalen Dialog würde das so in etwa funktionieren, aber du willst einen nicht-modalen. Dann geht das so nicht, weil das Programm bei ShowWindow nicht stehen bleibt, und am Ende des aktuellen Blocks wird das dlg-Objekt zerstört (verschwindet also wieder). Du kannst dlg zu einem Klassen-Mitglied machen, oder du kannst new einsetzen.
MfG,
Probe-Nutzer