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