Dialog "invisible" starten ...
-
toom schrieb:
ShowWindow () einfach auslassen...
sorry, hab übersehen das es sich um einen dialog handeld..
-
also WARUM die box angezeigt wird ist relativ einfach:(aus winapi)
DialogBox:
...The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style)
ich glaub du kommst um eine eigene message loop nicht herum
-
case WM_INITDIALOG: DWORD style = GetWindowLong(hwnd, GWL_STYLE); SetWindowLong(hwnd, GWL_STYLE, style - WS_VISIBLE); return TRUE;
-
WebFritzi schrieb:
case WM_INITDIALOG: DWORD style = GetWindowLong(hwnd, GWL_STYLE); SetWindowLong(hwnd, GWL_STYLE, style - WS_VISIBLE); return TRUE;
auch das habe ich schon erfolglos probiert.
-
Ich hab das mal recht quick und dirty gelöst gehabt:
Ich hatte einen Button, mit dem der User das Ding verschwinden lassen konnte (dann war nur ein Taskleisten-Symbol vorhanden).Also hab ich im WM_INITDIALOG einfach per SendMessage meinem Programm vorgegaukelt, das der User diesen Button geklickt hatte...
Wenn das nicht läuft, erstellt Dir nen Timer in WM_INITDIALOG, der in WM_TIMER sich sofort wieder killt und das Fenster versteckt...
Das Problem ist nämlich das zuerst WM_INITDIALOG abgearbeitet wird und DANN erst der Dialog gezeigt wird... Kann man gut erkennen, wenn man im InitDialog Dateien einlesen will und eine Progressbar den Fortschritt anzeigen soll:
Die Daten werden alle eingelesen und dann wird der Dialog mit 100% ProgressBar angezeigt...
-
lol
-
RockNix schrieb:
auch das habe ich schon erfolglos probiert.
Ich nicht. Bei mir funktioniert's.
-
Warum machst du eigentlich
- WS_VISIBLE
?
Bits "löscht" man doch anders.
-
Ich hatte auf die schnelle keine Ahnung wie. Also Minus. Warum denn nicht?
-
style &= ~WS_VISIBLE
-
hmm
also nochmal:der "visible" style wird beim aufruf von DialogBox ignoriert
das bischen mehrarbeit von dem ich geschrieben hab ist://anstelle von //:winmain.. //.. //DialogBox(xy...) //.. :winmain MSG messages; HWND dlgbox=0; ... dlgbox=CreateDialog(xy...); while (GetMessage (&messages,NULL,0,0)) if (! IsDialogMessage(dlgbox,&messages)) DispatchMessage(&messages); //und ind der dialogproc case WM_DESTROY:PostQuitMessage(0);break;