!modaler_Dialog
-
Hey Leute!
Ich möchte in einem Dialog den Status zu einem Programm ausgeben(nur TXT).
Wie krieg ich den Dialog so hin das er nicht modal ist.
Bis jetzt hab ich jeden Dialog mit
dialog.DoModal();
angezeigt.
Kann ja nicht zu schwer sein für profis wie euch.
Grüße, DANKE
Sigi
-
Hallo.
Versuch's mal so:
CMyDlg* dlg = new CMyDlg; dlg->Create(IDD_WHATEVER,NULL); //oder: dlg->Create(IDD_WHATEVER,this); //weiß net mehr genau dlg->ShowWindow(SW_SHOW); //Code... dlg->DestroyWindow(); delete dlg;
Bye.
-
Sowas wie ein Fortschrittsdialog?
CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/) : CDialog(CProgressDlg::IDD, pParent), m_bCancel(false) { //{{AFX_DATA_INIT(CProgressDlg) //}}AFX_DATA_INIT if(!Create(pParent)) AfxThrowResourceException(); ShowWindow(SW_SHOW); } CProgressDlg::~CProgressDlg() { if(m_hWnd) DestroyWindow(); } void CProgressDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CProgressDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CProgressDlg, CDialog) //{{AFX_MSG_MAP(CProgressDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // Behandlungsroutinen für Nachrichten CProgressDlg void CProgressDlg::OnOK() { OnCancel(); } void CProgressDlg::OnCancel() { m_bCancel = true; GetDlgItem(IDCANCEL)->EnableWindow(FALSE); } bool CProgressDlg::DoEvents() { MSG msg; while(!m_bCancel && PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if (!AfxGetThread()->PumpMessage()) return FALSE; // terminate if WM_QUIT received } return !m_bCancel; }
class CProgressDlg : protected CDialog { // Konstruktion public: CProgressDlg(CWnd* pParent = NULL); // Standardkonstruktor ~CProgressDlg(); // Dialogfelddaten //{{AFX_DATA(CProgressDlg) enum { IDD = IDD_COPY_PROGRESS }; // HINWEIS: Der Klassen-Assistent fügt hier Datenelemente ein //}}AFX_DATA private: // Create a modeless dialog BOOL CProgressDlg::Create(CWnd* pParentWnd = NULL) { return CDialog::Create(IDD, pParentWnd); } public: bool DoEvents(); // Processes all pending messages, returns false if cancelled bool IsCancelled() { return m_bCancel; } void Cancel() { m_bCancel = true; } operator bool() { return !m_bCancel; } private: bool m_bCancel; // Überschreibungen // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen //{{AFX_VIRTUAL(CProgressDlg) public: protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung //}}AFX_VIRTUAL virtual void OnOK(); virtual void OnCancel(); // Implementierung protected: // Generierte Nachrichtenzuordnungsfunktionen //{{AFX_MSG(CProgressDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() };
So anwenden:
CProgressDlg dlg; while(dlg.DoEvents()) { mach_was(); }
Es lässt sich dann auch noch eine Funktion wie SetStatus() einfügen, um die aktuelle Aktion anzuzeugen, o.Ä.
-
Happosai:
DANKE! War genau das was ich gesucht habe.dlg->Create(IDD_DLG_STATUS,NULL);
ist schon richtig
tag:
Werd deinen Code später erst genauer unter die Lupe nehmen. Auch DANKE!Frage?!?!
Was soll ich machen?
Bin eigendlich registriert in diesem Forum, hab aber mein Passwort vergessen?
(Username:bigsigi)MFG Sigi
-
Hallo.
Da gibt's gleich auf der Login-Seite einen Link, mit dem du dein Passwort neu anfordern kannst.
Bye.
-
Hat funktioniert
TSCHAU.
-
Ich hänge mich mal an diesen Thread...
Bei mir funktioniert das nicht:
CDebugClientDlg dialg (NULL, true); dialg.Create(IDD_DebugClient_DIALOG); dialg.ShowWindow(SW_SHOWNORMAL);
der Dialog blitzt nur kurz auf und ist dann wieder weg, wenn die Funktion abgearbeitet ist. Auserhalb der Funktion kann ich aber dialg nicht initialisieren, da es die gleiche Klasse ist.
-
na ist ja auch logisch - wenn die Funktion verlassen wird, wird die Instanz des Dialogs zerstört und damit verschwindet das Dialogfeld...
Wenn ich Dich richtig verstanden habe, willst Du Dir eine Funktion zur Dialogklasse hinzufügt, die Dein Dialogfeld nichtmodal öffnet?
lass das deklarieren von dialog weg und benutze gleich die Funktionen, dann beziehst Du Dich auf Deine eigene Klasse.
Create(IDD_DebugClient_DIALOG); ShowWindow(SW_SHOWNORMAL);
-
Fehlermeldung hier (wincore.cpp):
ASSERT(pWnd->m_hWnd == NULL); // only do once
Ich habe einen dialog modal geöffnet und will ihn nochmal nicht modal aber mit anderen Parametern öffnen...
Wie war das mit der vererbung?? wenn ich in der .h einen CDialog reinschreibe, kann ich dieser Variable dann die ableitung von meiner Klasse (abgeleitet von CDialog) zuweisen? (Wenn ja wie? hab ich nicht geschafft ??!!)
-
void CDebugClientDlg::OnOverwiew() // Button gedrückt { static CDebugClientDlg DlgOverview (NULL, true); //default: (NULL, false) DlgOverview.Create(IDD_DebugClient_DIALOG); DlgOverview.ShowWindow(SW_SHOWNORMAL); }
So bleibt er wenigstens schon mal da...
aber die beiden Dialoge stören sich. außerdem hört der parent mit dem zeichnen auf, wenn der zweite klein gemacht oder geschlossen wird.