Opened 17 years ago
Closed 17 years ago
#735 closed Bug (No Bug)
Resizing GUI after _GUICtrlStatusBar_EmbedControl() causes control to disappear
| Reported by: | PsaltyDS | Owned by: | |
|---|---|---|---|
| Milestone: | Component: | AutoIt | |
| Version: | 3.2.12.1 | Severity: | None | 
| Keywords: | Cc: | 
Description
Ref:  [Trac #45]
An embedded progress bar control embedded with _GUICtrlStatusBar_EmbedControl() will disappear when the GUI is re-sized.  This was previously reported, and it was also reported that if the progress was a marquee type it could also crash.
While the crash issue with the marquee progress bar was discussed and dismissed as not being AutoIt's problem, the original complaint that an ordinary progress control disappears when the the window is re-sized did not get addressed.  
Users are still running into and seeking a solution for the original issue (aside from the crash with the marquee type).  Even completely destroying and recreating the progress bars and status bar on re-size still won't display them (3.2.12.1 and 3.2.13.11).
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
Global $Form1, $hStatusBar, $progress, $hProgress, $progress2, $hProgress2
Global $StatusBar1_PartsWidth[3] = [100, 200, 250]
$Form1 = GUICreate("Form1", 401, 201, 440, 224, BitOR($WS_THICKFRAME, _
	$WS_SYSMENU, $WS_CAPTION, $WS_POPUP))
_StatusBarUpdate()
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
	_StatusBarUpdate()
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE
Func _StatusBarUpdate()
	ConsoleWrite("Debug: Updating statusbar" & @LF)
	GUICtrlDelete($progress)
	GUICtrlDelete($progress2)
	_GUICtrlStatusBar_Destroy($hStatusBar)
	$hStatusBar = _GUICtrlStatusBar_Create($Form1)
	_GUICtrlStatusBar_SetParts($hStatusBar, $StatusBar1_PartsWidth)
	_GUICtrlStatusBar_SetText($hStatusBar, "Ready", 0)
	$progress = GUICtrlCreateProgress(0, 0, -1, -1)
	$hProgress = GUICtrlGetHandle($progress)
	_GUICtrlStatusBar_EmbedControl($hStatusBar, 1, $hProgress)
	$progress2 = GUICtrlCreateProgress(0, 0, -1, -1)
	$hProgress2 = GUICtrlGetHandle($progress2)
	_GUICtrlStatusBar_EmbedControl($hStatusBar, 2, $hProgress2)
EndFunc   ;==>_StatusBarUpdate
    Attachments (0)
Change History (1)
comment:1 Changed 17 years ago by Gary
- Resolution set to No Bug
- Status changed from new to closed
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.


Still not a bug with the embed function.
Work around if embedding controls in status bar and using WM_SIZE:
#include <GuiConstantsEx.au3> #include <GuiStatusBar.au3> #include <WindowsConstants.au3> #include <ProgressConstants.au3> Global $hStatus, $hProgress, $hProgress2, $hGUI, $progress, $progress2, $fSize = False _Main() Func _Main() Local $hInput, $input Local $aParts[4] = [80, 160, 300, -1] ; Create GUI $hGUI = GUICreate("StatusBar Embed Control", 400, 300) GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)) $hStatus = _GUICtrlStatusBar_Create($hGUI) _GUICtrlStatusBar_SetMinHeight($hStatus, 20) _GUICtrlStatusBar_SetParts($hStatus, $aParts) _GUICtrlStatusBar_SetText($hStatus, "Part 1") _GUICtrlStatusBar_SetText($hStatus, "Part 2", 1) ; Embed a progress bar $progress = GUICtrlCreateProgress(10, 10, 100, 15, $PBS_SMOOTH) $hProgress = GUICtrlGetHandle($progress) _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hProgress) ;~ ; *** Warning *** Resizing the window with the following enabled will hard crash AutoIt. $progress2 = GUICtrlCreateProgress(0, 0, 100, 15, $PBS_MARQUEE) $hProgress2 = GUICtrlGetHandle($progress2) _GUICtrlStatusBar_EmbedControl($hStatus, 3, $hProgress2) _SendMessage($hProgress2, $PBM_SETMARQUEE, True, 200) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUISetState() Do If $fSize Then _GUICtrlStatusBar_EmbedControl($hStatus, 2, $hProgress) _GUICtrlStatusBar_EmbedControl($hStatus, 3, $hProgress2) $fSize = False EndIf Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>_Main ; Resize the status bar when GUI size changes Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam) _GUICtrlStatusBar_Resize($hStatus) $fSize = True GUICtrlSetPos($progress2, -100, -100) ; hide the marquee off the window until the status bar part is big enough to hold it. Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE