Fensterstyles setzen?



  • Hi!
    Hmmm ich habe ein Problem, und zwar will ich das Fensterstyle eines Fensters verändern. Ok das sollte eigentlich mit SetWindowLong und ein anschliessendes SetWindowPos gehen, aber irgendwie stürzt bei mir das Fenster immer ganz ab.

    Könnt ihr mir helfen?

    Das habe ich da immoment stehen:

    SetWindowLong(Win[1], GWL_STYLE, WS_CAPTION );
    SetWindowPos(Win[1], HWND_TOP, 0, 0, 0, 0, SWP_FRAMECHANGED );
    

    auch sowas wie

    SetWindowLong(Win[1], GWL_STYLE, WS_SYSMENU | WS_CAPTION );
    SetWindowPos(Win[1], HWND_TOP, 0, 0, 0, 0, SWP_FRAMECHANGED );
    

    geht net.

    Gruss,code_pilot 😕



  • LONG lStyle = GetWindowLong( Win[l], GWL_STYLE);
    SetWindowLong(Win[1], GWL_STYLE, lStyle|WS_CAPTION );
    

    Du darfst zu 90% ja schliesslich nicht alle der Styles weglassen, welche standardmässig gesetzt sind. Das gilt vor allem für WS_CHILD.



  • Hi!
    No, geht nich!

    Das Fenster schmiert zwar nicht mehr ab, aber es hat sich gar nicht verändert. Denn wenn ich das aktuelle Style übernehme und einfach nur WS_CAPTION hinzuadde kommt doch hinten gar nix raus!
    Das Fenster ist wiefolgt definiert:

    Win[1] = CreateWindowEx(0, szClassName, "Windows App2", WS_OVERLAPPEDWINDOW, 200, 200, 544, 375, HWND_DESKTOP,NULL,hInstance,NULL);
    

    Hmmmm ...



  • Hmmm, habe nochwas enddeckt...

    Also, erstmal habe ich jetzt

    SetWindowPos(Win[1], HWND_TOP, 0, 0, 0, 0, SWP_FRAMECHANGED );
    

    geändert auf

    SetWindowPos(Win[1], HWND_TOP, 100, 100, 100, 100, SWP_FRAMECHANGED );
    

    Zwar funktioniert sowas wie

    SetWindowLong(Win[1], GWL_STYLE,  WS_OVERLAPPED | WS_CAPTION );
    

    immer noch nicht, wohl aber

    SetWindowLong(Win[1], GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    

    Seltsam seltsam ... 😮



  • WS_OVERLAPPEDWINDOW besitzt ja auch schon WS_CAPTION. Ein Hinzufügen des gleichen Flags nochmal bringt dann natürlich nix.



  • OK aber was muss ich dann setzen?
    Ich möchte nämlich ein Fesnter haben, das nur einen schliessen-Button und eine Titelleiste hat, jedoch keine Minimieren- oder Maximieren-Box und keinen skalierbaren Rahmen.

    Wie kriege ich das hin mit SetWindowLong() ?



  • LONG lStyle = GetWindowLong( Win[l], GWL_STYLE);
    SetWindowLong(Win[1], GWL_STYLE, lStyle&~(WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX) );
    


  • Hi!
    Hey cool was man hier nicht noch alles lernt 😉 dein Beispiel ergab zwar ein Fenster ohne Titel 😉 aber so ging es dann:

    SetWindowLong(Win[1], GWL_STYLE, lStyle&~(WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX) );
    

    also nochmals besten dank 🙂 :p 🕶 😉 😃


Anmelden zum Antworten