Modify

Opened 15 years ago

Closed 15 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 15 years ago by Gary

  • Resolution set to No Bug
  • Status changed from new to closed

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

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.

Add Comment

Modify Ticket

Action
as closed The ticket will remain with no owner.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.