[已解决]状态栏如何跟随窗口大小而改变
本帖最后由 .Simba 于 2020-5-18 14:10 编辑#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
;功能:控制窗口最小尺寸100 x 100,最大尺寸800 x 800
;~ Global Const $WM_GETMINMAXINFO = 0x0024
$Gui = GUICreate("控制窗口大小", 300, 300, -1, -1, 0x00040000) ;$WS_SIZEBOX
GUISetState()
;状态栏设置
Local $aParts =
Local $aText =
_GUICtrlStatusBar_Create($Gui, $aParts, $aText)
GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO") ;注册回调函数
Do
Until GUIGetMsg() = -3
Func WM_GETMINMAXINFO($hwnd, $Msg, $wparam, $lparam)
Local $tagMINMAXINFO = "int;int;int;int;int;int;int;int;int;int"
$MINMAXINFO = DllStructCreate($tagMINMAXINFO, $lparam)
DllStructSetData($MINMAXINFO, 7, 100) ;min x
DllStructSetData($MINMAXINFO, 8, 100) ;min y
DllStructSetData($MINMAXINFO, 9, 800) ;max x
DllStructSetData($MINMAXINFO, 10, 800) ;max y
EndFunc ;==>WM_GETMINMAXINFO自己尝试拼接代码,没有成功,哪位坛友帮忙指点下。
注册 WM_SIZE 消息,在该消息中计算部件宽度并SetParts afan 发表于 2020-5-16 21:04
注册 WM_SIZE 消息,在该消息中计算部件宽度并SetParts
A大,上边的例子高度也不会改变,是不是也要计算高度? .Simba 发表于 2020-5-16 21:10
A大,上边的例子高度也不会改变,是不是也要计算高度?
高度?是Y坐标吧?状态栏高度是常量。Y坐标SetParts就行了,会自动定位 afan 发表于 2020-5-16 21:15
高度?是Y坐标吧?状态栏高度是常量。Y坐标SetParts就行了,会自动定位
A大,窗口改变后,鼠标拖动这里也状态栏一下就下去了,是不是有简单一点的方法?
afan 发表于 2020-5-16 21:15
高度?是Y坐标吧?状态栏高度是常量。Y坐标SetParts就行了,会自动定位
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
;功能:控制窗口最小尺寸100 x 100,最大尺寸800 x 800
;~ Global Const $WM_GETMINMAXINFO = 0x0024
$Gui = GUICreate("控制窗口大小", 300, 300, -1, -1, 0x00040000) ;$WS_SIZEBOX
GUISetState()
;状态栏设置
Local $aParts =
Local $aText =
$g_hStatus = _GUICtrlStatusBar_Create($Gui, $aParts, $aText)
GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO") ;注册回调函数
GUIRegisterMsg($WM_SIZE, 'WM_SIZE') ;改变状态栏大小
Do
Until GUIGetMsg() = -3
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
Switch $hWnd
Case $Gui
Switch $wParam
Case 0
Case 1
Case 2
Case 3
Case 4
EndSwitch
EndSwitch
$aPos = WinGetPos($Gui)
If Not IsArray($aPos) Then Return
;这里不会写了
ConsoleWrite($aPos & '->' & $aPos & '->' & $aPos & '->' & $aPos & @CRLF)
EndFunc ;==>WM_SIZE
Func WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
Local $tagMINMAXINFO = "int;int;int;int;int;int;int;int;int;int"
$MINMAXINFO = DllStructCreate($tagMINMAXINFO, $lParam)
ConsoleWrite($MINMAXINFO)
DllStructSetData($MINMAXINFO, 7, 100) ;min x
DllStructSetData($MINMAXINFO, 8, 100) ;min y
DllStructSetData($MINMAXINFO, 9, 800) ;max x
DllStructSetData($MINMAXINFO, 10, 800) ;max y
EndFunc ;==>WM_GETMINMAXINFO
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)
EndFunc
要做就做好,敷衍很简单。 afan 发表于 2020-5-16 21:38
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)
谢谢A大,我再看看。 主要是对这个没头绪,不知道怎么下手。 afan 发表于 2020-5-16 21:38
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)
;这里不会写了
ConsoleWrite($aPos & '->' & $aPos & '->' & $aPos & '->' & $aPos & @CRLF)
Local $x = int($aPos / 3)
ConsoleWrite($x & @CRLF)
Local $arrX
$arrX = $x
$arrX = $x
$arrX = -1
_GUICtrlStatusBar_SetParts($g_hStatus, 3, $arrX)
A大我认真看了一下帮助,是不是这样的效果? .Simba 发表于 2020-5-16 22:01
A大我认真看了一下帮助,是不是这样的效果?
去掉第二个参数位
_GUICtrlStatusBar_SetParts($g_hStatus, $arrX) afan 发表于 2020-5-16 22:06
去掉第二个参数位
_GUICtrlStatusBar_SetParts($g_hStatus, $arrX)
去掉第二个参数,拖动窗口改变大小的时候,第二格栏会消失。
.Simba 发表于 2020-5-16 22:10
去掉第二个参数,拖动窗口改变大小的时候,第二格栏会消失。
那是因为你上面的计算不对,这也要我说么… 如果要第二个参数那就将3改为 -1
_GUICtrlStatusBar_SetParts($g_hStatus, -1, $arrX) afan 发表于 2020-5-16 22:18
如果要第二个参数那就将3改为 -1
_GUICtrlStatusBar_SetParts($g_hStatus, -1, $arrX)
谢谢A大,我这里折腾如何计算还是没成功。 #include <GuiStatusBar.au3>
Global $hGui = GUICreate("控制窗口大小", 300, 300, -1, -1, 0x00040000) ;$WS_SIZEBOX
GUISetState()
Global $vbfb0 = 0.25, $vbfb1 = 0.5
Local $aParts =
Local $aText =
Global $hStatus = _GUICtrlStatusBar_Create($hGui, $aParts, $aText)
GUIRegisterMsg(0x05, "WM_SIZE")
Do
Until GUIGetMsg() = -3
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
Local $aWp = WinGetPos($hGui)
Local $aParts = [$aWp * $vbfb0, $aWp * $vbfb1, -1]
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
EndFunc ;==>WM_SIZE
页:
[1]
2