Dialog?
-
Hi Leute,
Ich mache gerade ein Programm auf Dialogfeld basierdener Ebene. Darin habe ich jetzt ein 2. Dialog Feld erstelle und will es mitvoid CShutdownDlg::Desktop(int Sekunden) { CTimerabDlg Tdlg; Tdlg.DoModal(); }
aufrufen. Wenn es jedoch aufgerufen ist, kann ich nicht mehr zum Hauptfenster springen. Weiß jemand wie das geht. Muss ich das in einem Thread ausführen?
-
So wie du den Dialog aufrufst heißt das "modal" aber es geht auch "modeless".
Mit MFC kannst du den Dialog so "modeless" erstellen:CTimerabDlg Tdlg; RECT rc={22,22,300,300}; Tdlg.Create(AfxRegisterWndClass(0,LoadCursor(0,IDC_ARROW),NULL,NULL),"",WS_CHILD|WS_VISIBLE,rc,this,0x00,NULL);
mhm ist natürlich nicht die schönste Lösung aber immerhin
Hoffe das hilft dir weiter.
Mfg
Tristan
-
danke aber es funktioniert nicht.
Es kommt immererror C2661: 'Create' : Keine ueberladene Funktion akzeptiert 7 Parameter
-
void CShutdownDlg::Desktop(int Sekunden)
{
CTimerabDlg Tdlg;
Tdlg.Create(DeinDialogname);
Tdlg.ShowWindow(SW_SHOW);
}MfG
-
Da Fenster wird zwar kurz aufgebaut ist jedoch danach direkt wieder weg.
-
Ist ein C++ feature.
Variablen in Funktionen sind nur solange gültig bis die Funktion zurückkehrt.
Da die Createfunktion sofort zurückkehrt wird auch die Funktion Desktop beendet und die Klasseninstanz deines Dialogs auch.
Die geschieht bei DoModal nicht. (Deshalb kann man da auch nicht den Hauptdialog bearbeiten bis der aufgerufene geschlossen wird.)
-
Einfache Lösung:
// In CShutdownDlg.h private: CTimerabDlg Tdlg; // Und dann einfach in die cpp schreiben: void CShutdownDlg::Desktop(int Sekunden) { Tdlg.Create(DeinDialogname); Tdlg.ShowWindow(SW_SHOW); }
-
Danke @WebFritzi.
Klappt endlich
-
Aber wenn ich das Fenster schließe und dann nochmal aufrufen will, kommt eine Fehlermeldung.
-
ist ja wohl ganz klar. mach ma nen Detach
-
Ich bin noch Anfänger also was ist bitte ein " Detach "
-
wie lautet die fehlermeldung von der du sprachst?
-
Debug Assertion Failed!
Program: ....
File: wincore.cpp
Line: 628
-
da steht doch bestimmt noch ne genauere meldung. das wichtigste hast du daraus vergessen!!
-
Titel: Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: [Pfad zum Programm]
File: wincore.cpp
Line: 628For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
Abbrechen Wiederholen Ignorieren
mehr steht da nicht
-
ASSERT(pWnd->m_hWnd == NULL);
-
was ist denn pWnd?