PanicMan Geschrieben 4. Mai 2002 Teilen Geschrieben 4. Mai 2002 Hallo! Ich habe ein Programm, das eine Aufgabe macht und dafür eine Weile braucht. Nun habe ich ein Dialog gemacht mit einem Progressbar. Jetzt möchte ich, das wenn die Aufgabe startet, dieser ProgressDialog hochkommt, und ich aus dem Hauptdialog die Progressbar steuere. Modal kann ich das ja nicht machen, weil der hauptdialog dann nicht mehr weiter läuft... Ich denke das geht mit Create(...), ich habe auch schon einiges versucht, aber ich kriegs nicht hin. Kann mir mal einer ein BeißpielCode posten? Am besten währe es noch, wenn man den Fokus nicht mehr auf den hauptdialog setzen kann, so wie beim modalen. Sowas kann doch nicht so schwer sein??? Das sieht man doch überall, WinRAR, WinZIP, etc.... Ich brauche das ganz dringend.... Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Comroader Geschrieben 4. Mai 2002 Teilen Geschrieben 4. Mai 2002 CProgressDlg* pDialog; pDialog = new CProgressDlg(); if(pDialog != NULL) { BOOL ret = pDialog->Create(IDD_PROGRESS,pDialog); if(!ret) AfxMessageBox("Fehler beim Erzeugen des Dialogs"); pDialog->ShowWindow(SW_SHOW); } else { AfxMessageBox("Fehler beim Erzeugen des Dialog-Objekts"); } So wird eine nicht-modaler Dialog erzeugt. CProgressDlg ist die Klasse für mein Dialog Fenster und IDD_PROGRESS meine Ressourcen-ID. Wenn der Prozess von der eine rechenintensive Aufgabe ist, brauchst du wahrscheinlich noch eine andere Funktion zum Neuzeichnen des Fensters. Das geht dann mit: void COptionsDlg:: DoEvents() { MSG msg; m_bCancel = FALSE; // Process existing messages in the application's message queue. // When the queue is empty, do clean up and return. while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) && !m_bCancel) { if (!AfxGetThread()->PumpMessage()) return; } } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 4. Mai 2002 Teilen Geschrieben 4. Mai 2002 hallo panicman, das ist das, was in der msdn steht: Bei einem nichtmodalen Dialogfeld sollten Sie Ihren eigenen öffentlichen Konstruktor in Ihrer Dialogklasse bereitstellen. Um ein nichtmodales Dialogfeld zu erstellen, rufen Sie Ihren öffentlichen Konstruktor und dann die Member-FunktionCreate des Dialogobjekts auf, um die Dialogressource zu laden. Sie können Create sowohl während als auch nach dem Aufruf des Konstruktors aufrufen. Verfügt die Dialogressource über die Eigenschaft WS_VISIBLE, so wird das Dialogfeld unmittelbar angezeigt. Ist dies nicht der Fall, so sollten Sie die zugehörige Member-FunktionShowWindow aufrufen. Nachdem das Dialogfeld und sämtliche zugehörigen Steuerelemente erstellt wurden, aber noch bevor das Dialogfeld (eines beliebigen Typs) auf dem Bildschirm angezeigt wird, wird die Member-FunktionOnInitDialog des Dialogobjekts aufgerufen. Bei einem modalen Dialogfeld erfolgt dies während des Aufrufs von DoModal. Bei einem nichtmodalen Dialogfeld wird OnInitDialog aufgerufen, wenn Create aufgerufen wird. Sie überschreiben normalerweise OnInitDialog, um die Steuerelemente des Dialogfelds zu initialisieren, wie z. B. die Einstellung des Anfangstextes in einem Bearbeitungsfeld. Sie sollten die Member-Funktion OnInitDialog der Basisklasse CDialog beim Überschreiben von OnInitDialog aufrufen. Wenn Sie die Hintergrundfarbe Ihres Dialogfelds (und aller anderen Dialogfelder in Ihrer Anwendung) einstellen wollen, lesen Sie hierzu Einstellen der Hintergrundfarbe des Dialogfelds. ich hab bis jetzt nur modale dialoge erstellt, deshalb hab ich keine codes. k.o.b Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
PanicMan Geschrieben 4. Mai 2002 Autor Teilen Geschrieben 4. Mai 2002 @Comroader : Danke!! Hab's zum laufen gekriegt!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.