Post-Init Funktion bei CDialog
-
Hi,
stehe gerade etwas auf dem Schlauch. Ich benötige eine Funktion in meinem CDialog welche nach der Initialisierung des Dialogs aufgerufen wird, also dann wenn das Fenster des Dialogs schon existiert. Dies brauch ich zum Beispiel weil ich die neue Taskbar von Windows 7 als Progress-Bar initialisieren will. Das schlägt aber in der OnCreate, Create und der InitDialog Funktion fehl da das Fenster des Dialogs noch nicht existiert.
Mir ist bis jetzt nur die OnActivate() Funktion eingefallen, welche meine Taskbar-Initialisierung nur einmal aufruft: (Pseudocode)OnActivate() { if( !m_bAlreadyInit ) { InitTaskbar(); m_bAlreadyInit = true; } }
m_bAlreadyInit ist hierbei ein Member-Bool welcher im Constructor auf false initialisiert wird.
Ich frage mich nur ob es da eine bessere bzw. sauberere Lösung gibt?
-
OnInitDialog ist die entsprechende Funktion!
-
Diese Funktion funktioniert leider auch nicht. Und das obwohl die bei mir ca. so aussieht:
BOOL CFSDialog::OnInitDialog() { int ret = CDialogEx::OnInitDialog(); //Code... return ret; }
In dieser Funktion öffne ich ein Shell-Fenster zur Dateiauswahl (der Aufruf ist blockierend). Das Dialogfenster öffnet sich aber erst nachdem der "Öffne" Dialog geschlossen wurde.
-
RedPuma schrieb:
der Aufruf ist blockierend
So was macht man ja auch nicht.
RedPuma schrieb:
Das Dialogfenster öffnet sich aber erst nachdem der "Öffne" Dialog geschlossen wurde.
Selbst wenn der Dialog dann schon angezeigt würde, könntest du nichts damit machen, solange das Dateiauswahlfenster offen ist. Wo ist das Problem?
-
Es geht mir auch nicht um den Datei-Dialog sondern um die Windows 7 Taskbar Initialisierung welche in dieser Funktion ebenfalls nicht funktioniert. Das mit dem Datei-Dialog war nur zur Verdeutlichung bzw. zum Beweis gedacht dass das eigentliche Dialog-Fenster noch nicht existiert.
-
Was genau schlägt denn da fehlt, wenn du das in OnInitDialog machst?
-
Fehlermeldung bekomme ich keine, der Funktionsaufruf wird einfach ignoriert:
CFrameWnd *pFrame = (CFrameWnd*)this; pFrame->SetProgressBarState( TBPF_INDETERMINATE );
Wenn ich diesen Schnipsel in einer anderen Funktion, welche durch einen Button im Dialog aufgerufen wird, einfüge funktioniert er tadellos.