Dialog "invisible" starten ...



  • toom schrieb:

    ShowWindow () einfach auslassen...

    Ah ja... und wie soll er das machen bei einem Dialog?



  • Also, hätt er da ShowWindow mit dem Param SW_SHOW stehen, dann würd er wahrscheinlich nicht fragen... DAnn hätte er das selbst bemekren sollen...



  • a) hast du wohl meinen vorschlag (noch) nicht probiert
    b) könntest du auch auf einen nicht modalen dialog umsteigen, dann wird das fenster nicht automatisch angezeigt, macht aber mehr arbeit als mein erster vorschlag 😉



  • Lui schrieb:

    a) hast du wohl meinen vorschlag (noch) nicht probiert
    b) könntest du auch auf einen nicht modalen dialog umsteigen, dann wird das fenster nicht automatisch angezeigt, macht aber mehr arbeit als mein erster vorschlag 😉

    doch habe ich natürlich, funktioniert aber leider nicht in meiner anwendung. ob es am toolbox-style des fensters liegt ? keine ahnung, suche noch ...



  • 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