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;
    

Anmelden zum Antworten