Neuen Fensterstyle setzen geht ned



  • Hey!

    Warum funktioniert SetWindowLong() nicht:

    HWND windowHandle = CreateWindow("Main", 0, WS_POPUP | WS_VISIBLE, 0, 0, 0, 0, 0, 0, 0, 0);
    
    SetWindowLong(windowHandle, GWL_STYLE, WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE); 
    SetWindowPos(windowHandle, HWND_NOTOPMOST, 0, 0, 640, 480, SWP_FRAMECHANGED);
    

    SetWindowPos() hat einen Effekt, aber das Fenster hat anschließend trotzdem kein SYSMENU oder ne MINIMIZEBOX.

    Was mach ich falsch?

    Danke!
    MfG



  • Überprüf die Rückgabewerte und lass Dir mit GetLastError die Fehlercodes geben.



  • Wenn ich...

    if(SetWindowLong(windowHandle, GWL_STYLE, WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE) == 0)
    		MessageBox(0, 0, 0, 0);
    

    ...schreibe, wird keine MessageBox angezeigt und GetLastError() ist 0. Wenn ich aber...

    if(SetWindowLong(windowHandle, GWL_STYLE, WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE) == WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE)
    		MessageBox(0, 0, 0, 0);
    

    ...schreibe, wird die MessageBox angezeigt und GetLastError() ist 6? Warum tritt ein Fehler auf, wenn ich mit einem anderen Wert vergleiche??

    MfG



  • Hast du dir mal angesehen, was der Rückgabewert von SetWindowLong() darstellt? Und wo genau fragst du GetLastError() ab?

    (btw - Fehlercode 6 steht für "ungültiges Handle", vielleicht hilft das ja)



  • Das stellt der Rückgabewert dar: WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE
    GetLastError rufe ich danach auf. Ja, ungültiges Handle, aber warum nur, wenn ich mit den styles vergleiche? Das kann doch nix mit einem Vergleich zu tun haben.

    MfG



  • ceplusplus@loggedoff schrieb:

    Das stellt der Rückgabewert dar: WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE

    *g* Lies nochmal langsam - in der MSDN steht auch dabei, was dieser Wert aussagen soll 😉

    (btw, ich erinnere mich dunkel, daß einige Fensterstile schon beim Anlegen gesetzt werden MÜSSEN)



  • Oh, "the previous value" ... aber der Rückgabewert ist ja nicht 0. Ich versteh garnix mehr...

    windowClass.lpfnWndProc = MsgProc;
    windowClass.lpszClassName = "Main";
    
    RegisterClass(&windowClass);
    
    windowHandle = CreateWindow("Main", 0, WS_POPUP | WS_VISIBLE, 0, 0, 0, 0, 0, 0, 0, 0);
    
    SetWindowLong(windowHandle, GWL_STYLE, WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE); 
    SetWindowPos(windowHandle, HWND_NOTOPMOST, 0, 0, 640, 480, SWP_FRAMECHANGED);
    

    Warum haut es nicht hin?



  • Hab wo anders nachgefragt. Problem gelöst:
    Man muss WS_CAPTION auch setzen, sobald man einmal WS_POPUP gesetzt hat oder so. Jedenfalls muss dieser style noch dazu, wenn man in den Fenstermodus geht.

    MfG


Anmelden zum Antworten