Zum Inhalt springen

Wie erstelle ich ein NichtModalen Dialog?


Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...