Dialog "invisible" starten ...



  • also ich habe eine anwendung, die nur im tray erscheint ... das fenster ist ein dialog mit toolbox style.

    per tray-menu toogle ich das fenster zwischen sichtbar und unsichtbar mit ShowWindow( hwnd, SW_HIDE) bzw. ShowWindow( hwnd, SW_SHOW) ... klappt soweit auch einwandfrei.

    nur - ich kann das fenster nicht unsichtbar starten - sprich beim start der anwendung ist es zunächst sichtbar. ShowWindow( hwnd, SW_HIDE) in WM_INITDIALOG hat keinen erfolg.

    hat da mal jemand einen tip ?



  • Ist der Dialog mit dem DialogEditor erstellt?

    Evtl. kannste da "Sichtbar" auf FALSE setzen...
    bzw. den Stil WS_VISIBLE entfernen...



  • Hepi schrieb:

    Ist der Dialog mit dem DialogEditor erstellt?

    Evtl. kannste da "Sichtbar" auf FALSE setzen...
    bzw. den Stil WS_VISIBLE entfernen...

    hmm, der ist bereits ausgeschaltet, das ist ja das merkwürdige 😕



  • Lässt sich gar nicht verhindern.



  • Lässt sich gar nicht verhindern.

    doch:programm nicht starten.

    Scherz beiseite:
    'n bischen schmutzig (und nicht verifiziert)aber schnell:

    // in der dialogproc
    
    static BOOL firstshow=0;
    ..
    WM_SHOWWINDOW:if(!firstshow){firstshow=TRUE;return 1};break;
    


  • ShowWindow () einfach auslassen...



  • toom schrieb:

    ShowWindow () einfach auslassen...

    lol 👎



  • toom schrieb:

    ShowWindow () einfach auslassen...

    wie meinen 😕 ???



  • 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.


Log in to reply