找回密码
 加入
搜索
查看: 4698|回复: 19

[AU3基础] [已解决]状态栏如何跟随窗口大小而改变

[复制链接]
发表于 2020-5-16 20:49:41 | 显示全部楼层 |阅读模式
本帖最后由 .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[3] = [75, 150, -1]
        Local $aText[3] = [75, 150, -1]
        _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
自己尝试拼接代码,没有成功,哪位坛友帮忙指点下。


发表于 2020-5-16 21:04:35 | 显示全部楼层
注册 WM_SIZE 消息,在该消息中计算部件宽度并SetParts
 楼主| 发表于 2020-5-16 21:10:52 | 显示全部楼层
afan 发表于 2020-5-16 21:04
注册 WM_SIZE 消息,在该消息中计算部件宽度并SetParts

A大,上边的例子高度也不会改变,是不是也要计算高度?
发表于 2020-5-16 21:15:03 | 显示全部楼层
.Simba 发表于 2020-5-16 21:10
A大,上边的例子高度也不会改变,是不是也要计算高度?

高度?是Y坐标吧?状态栏高度是常量。Y坐标SetParts就行了,会自动定位
 楼主| 发表于 2020-5-16 21:31:36 | 显示全部楼层
afan 发表于 2020-5-16 21:15
高度?是Y坐标吧?状态栏高度是常量。Y坐标SetParts就行了,会自动定位


A大,窗口改变后,鼠标拖动这里也状态栏一下就下去了,是不是有简单一点的方法?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2020-5-16 21:32:56 | 显示全部楼层
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[3] = [75, 150, -1]
Local $aText[3] = [75, 150, -1]
$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[0] & '->' & $aPos[1] & '->' & $aPos[2] & '->' & $aPos[3] & @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
发表于 2020-5-16 21:38:03 | 显示全部楼层
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)
EndFunc
要做就做好,敷衍很简单。
 楼主| 发表于 2020-5-16 21:43:34 | 显示全部楼层
afan 发表于 2020-5-16 21:38
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)

谢谢A大,我再看看。 主要是对这个没头绪,不知道怎么下手。
 楼主| 发表于 2020-5-16 22:01:35 | 显示全部楼层
afan 发表于 2020-5-16 21:38
你要简单可以
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
_GUICtrlStatusBar_Resize($hStatus)
        ;这里不会写了
        ConsoleWrite($aPos[0] & '->' & $aPos[1] & '->' & $aPos[2] & '->' & $aPos[3] & @CRLF)
        Local $x = int($aPos[2] / 3)
        ConsoleWrite($x & @CRLF)
        Local $arrX[3]
        $arrX[0] = $x
        $arrX[1] = $x
        $arrX[2] = -1
        _GUICtrlStatusBar_SetParts($g_hStatus, 3, $arrX)


A大  我认真看了一下帮助,是不是这样的效果?
发表于 2020-5-16 22:06:31 | 显示全部楼层
.Simba 发表于 2020-5-16 22:01
A大  我认真看了一下帮助,是不是这样的效果?

去掉第二个参数位
_GUICtrlStatusBar_SetParts($g_hStatus, $arrX)
 楼主| 发表于 2020-5-16 22:10:58 | 显示全部楼层
afan 发表于 2020-5-16 22:06
去掉第二个参数位
_GUICtrlStatusBar_SetParts($g_hStatus, $arrX)

去掉第二个参数,拖动窗口改变大小的时候,第二格栏会消失。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2020-5-16 22:13:12 | 显示全部楼层
.Simba 发表于 2020-5-16 22:10
去掉第二个参数,拖动窗口改变大小的时候,第二格栏会消失。

那是因为你上面的计算不对,这也要我说么…  
发表于 2020-5-16 22:18:30 | 显示全部楼层
如果要第二个参数那就将3改为 -1
_GUICtrlStatusBar_SetParts($g_hStatus, -1, $arrX)
 楼主| 发表于 2020-5-16 22:31:02 | 显示全部楼层
afan 发表于 2020-5-16 22:18
如果要第二个参数那就将3改为 -1
_GUICtrlStatusBar_SetParts($g_hStatus, -1, $arrX)

谢谢A大,我这里折腾如何计算还是没成功。
发表于 2020-5-16 22:41:40 | 显示全部楼层
#include <GuiStatusBar.au3>

Global $hGui = GUICreate("控制窗口大小", 300, 300, -1, -1, 0x00040000) ;$WS_SIZEBOX
GUISetState()
Global $vbfb0 = 0.25, $vbfb1 = 0.5
Local $aParts[3] = [75, 150, -1]
Local $aText[3] = [75, 150, -1]
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[3] = [$aWp[2] * $vbfb0, $aWp[2] * $vbfb1, -1]
        _GUICtrlStatusBar_SetParts($hStatus, $aParts)
EndFunc   ;==>WM_SIZE
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-2 06:53 , Processed in 0.083245 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表