WildByDesign Posted June 19 Posted June 19 I have noticed, by default, when you hover over the sizegrip ($SBARS_SIZEGRIP) on the statusbar of a resizable GUI that there is no change in cursor. Generally, it should show the SIZENWSE cursor to indicate that the GUI can be resized from the statusbar gripper. Below, I will share an example from _GUICtrlStatusBar_Resize. The only change that I made was to add the $SBARS_SIZEGRIP style to _GUICtrlStatusBar_Create() in hopes that it might fix the problem. It did not fix the problem. I am not sure if this is an AutoIt bug with statusbar or if there is just something that I am missing. Thank you for your time. expandcollapse popup#include <WindowsStylesConstants.au3> #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WindowsNotifsConstants.au3> Global $g_hStatus Example() Func Example() ; Create GUI Local $hGUI = GUICreate("StatusBar Resize (v" & @AutoItVersion & ")", 450, 320, -1, -1, $WS_OVERLAPPEDWINDOW) ; Set parts Local $hStatus = _GUICtrlStatusBar_Create($hGUI, -1, -1, $SBARS_SIZEGRIP) $g_hStatus = $hStatus Local $aParts[3] = [75, 150, -1] _GUICtrlStatusBar_SetParts($hStatus, $aParts) _GUICtrlStatusBar_SetText($hStatus, "Part 0") _GUICtrlStatusBar_SetText($hStatus, "Part 1", 1) _GUICtrlStatusBar_SetText($hStatus, "Part 2", 2) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_SIZE, "WM_SIZE") ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam _GUICtrlStatusBar_Resize($g_hStatus) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE mLipok 1
WildByDesign Posted June 19 Author Posted June 19 Interestingly, I seem to get the cursor change when I add $WS_SIZEBOX during *StatusBar_Create(). Local $hStatus = _GUICtrlStatusBar_Create($hGUI, -1, -1, BitOR($SBARS_SIZEGRIP, $WS_SIZEBOX)) However, it causes some visual bugs.
Solution MattyD Posted 11 hours ago Solution Posted 11 hours ago (edited) Yeah, we probably need to handle WM_SETCURSOR. So something like this: Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam Local Static $hCursorSW = _WinAPI_LoadCursor(0, $OCR_SIZENWSE) If _WinAPI_LoWord($lParam) = $HTBOTTOMRIGHT Then If _WinAPI_GetCursor() <> $hCursorSW Then _WinAPI_SetCursor($hCursorSW) Return True EndIf Return $GUI_RUNDEFMSG EndFunc Or even: Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam If _WinAPI_LoWord($lParam) <> $HTCLIENT Then Return _WinAPI_DefWindowProcW($hWnd, $iMsg, $wParam, $lParam) EndIf Return $GUI_RUNDEFMSG EndFunc Edited 11 hours ago by MattyD tidy mLipok and WildByDesign 2
WildByDesign Posted 11 hours ago Author Posted 11 hours ago 19 minutes ago, MattyD said: Yeah, we probably need to handle WM_SETCURSOR. Thank you so much, Matty. Both of the solutions that you provided work perfectly. MattyD 1
WildByDesign Posted 10 minutes ago Author Posted 10 minutes ago I just wanted to follow up with my original example from the first post combined with Matty's fix just in case anyone is curious about this or needs this sometime in the future. expandcollapse popup#include <WindowsStylesConstants.au3> #include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WindowsNotifsConstants.au3> #include <WinAPISysWin.au3> Global $g_hStatus Example() Func Example() ; Create GUI Local $hGUI = GUICreate("StatusBar Resize (v" & @AutoItVersion & ")", 450, 320, -1, -1, $WS_OVERLAPPEDWINDOW) ; Set parts Local $hStatus = _GUICtrlStatusBar_Create($hGUI, -1, -1, $SBARS_SIZEGRIP) $g_hStatus = $hStatus Local $aParts[3] = [75, 150, -1] _GUICtrlStatusBar_SetParts($hStatus, $aParts) _GUICtrlStatusBar_SetText($hStatus, "Part 0") _GUICtrlStatusBar_SetText($hStatus, "Part 1", 1) _GUICtrlStatusBar_SetText($hStatus, "Part 2", 2) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_SETCURSOR, "WM_SETCURSOR") ; Loop until the user exits. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>Example ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam _GUICtrlStatusBar_Resize($g_hStatus) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam If _WinAPI_LoWord($lParam) <> $HTCLIENT Then Return _WinAPI_DefWindowProcW($hWnd, $iMsg, $wParam, $lParam) EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_SETCURSOR
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now