Welches event kennzeichnet den vollständigen Aufbau eines Dialogs?
-
Hi,
ich habe folgendes Problem:
Beim starten des Dialogs fülle ich mein Treeview rekursiv mit den Laufwerken des Systems.
Das blöde is nur wenn es sich um ein CD-Rom handelt und das ding erst anspringen muss, dauert es natürlich auch lange bis man vom Dialog auch etwas sieht.Gibts ne Möglichkeit die Funktion erst aufzurufen wenn der Dialog vollständige da ist?
Oder muss ich das im WM_PAINT machen und beim ersten mal nen Flag setzten, das er das ganze nicht nach jedem in die Taskleiste werfen und wiederherstellen neu durchläuft?
Danke
-
Suchst du OnInitDialog?
-
Sorry habe vergessen zu schreiben das ich OnInitDialog verwende.
Gibt es noch eine Event nach OnInitDialog?
-
Also, ich sehe da zwei Möglichkeiten:
1. Du schmeißt am Ende von OnInitdialog einen Timer an. Wenn die Nachricht kommt, ist OnInitDialog wirklich fertig.
2. Du nutzt einen Thread. Dazu findest du hoffentlich genug im Forum.
-
Timer habe ich mir auch schon überlegt, is halt nur ein wenig unsauber
Ich glaube ich versuchs mal mit nem Thread, hoffe nur ich versau mir jetzt nicht mein Programm
Kann man denn einem Thread sagen das dieser nur eine bestimmte funktion aufruft wie z.B.CDialog::OnItDialog() { //Todo.... StartThread(threadid); } CDialog::FindDrives() { while (drives...) { LoopDirectory() } } CDialog::LoopDirectory() { //mach was }
Der Thread sollte also die Funktion Finddrives aufrufen, welche wiederum mehrmals LoopDirectory aufruft.
Nach Finddrives wäre dann Fin. Thread löschen..Danke
-
Also, um einem versauten Programm vorzubeugen, kopier doch einmal dein komplettes Projektverzeichnis. Wenn du dann Murks machst, kannst du den alten Stand ohne Probleme wieder herstellen.
Von Threads habe ich leider keine Ahnung.
Ich vermute aber, dass du jede Funktion ausführen lassen kannst, solange daran kein Fenster beteiligt ist (damit gibt es wohl Probleme...). Du kannst also nicht das Listcontrol füllen - aber ein Array.
-
Du musst Thread´s benutzen ...
Du kannst in der OnInitDialog() einen Thread Starten der dann dein TreeView füllt.
Du definierst eine globale Funktion in der CPP.
z.B. void MeinThread( void* arg );
Das ist der Prototyp.
Dann muss du noch natürlich die Funktion selber schreiben .
z.b.void MeinThread( void* arg )
{
CTreeView* TV = (CTreeVie*) arg;
// Nun kommt das füllen ....
}In der OnInitDialog Fuinktion kannst Du nun
AfxBeginTread(MeinThread,m_ptrTreeViw) // Parameter 1 == Funktion 2 == TreeviewDas wars ..
Wenn Du damit nicht klar kommst einfach posten ...