找回密码
 加入
搜索
查看: 1832|回复: 5

[网络通信] 【已解决】关于状态栏的请教

[复制链接]
发表于 2021-2-24 21:15:52 | 显示全部楼层 |阅读模式
本帖最后由 anythinging 于 2021-2-24 21:58 编辑

关于状态栏,遇到2个小问题,在此请教各位!
1、右对齐 被吃进去了一此,目前只会用在后面加空格解决。
2、窗口最大化或调整大小,状态栏无法随着变化
代码是帮助文件的例子,加了个样式
感谢!
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>

Global $g_idMemo, $g_hMainGUI, $g_hStatus

Example()

Func Example()
    Local $hGUI
    Local $aText[3] = ["左对齐", @TAB & "居中", @TAB & @TAB & "右对齐"]
    Local $aParts[3] = [100, 175, -1]

    ; 创建 GUI
    $hGUI = GUICreate("(示例 3) 创建状态栏", 400, 300,-1,-1,BitOR($GUI_SS_DEFAULT_GUI,$WS_SIZEBOX ,$WS_MAXIMIZEBOX ) )

    ;设置组件与文本
    $g_hStatus = _GUICtrlStatusBar_Create($hGUI, $aParts, $aText)
    ; 创建备忘录控件
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    GUICtrlSendMsg($g_idMemo, $EM_SETREADONLY, True, 0)
    GUICtrlSetBkColor($g_idMemo, 0xFFFFFF)
    GUISetState(@SW_SHOW)

    MemoWrite("状态栏创建:" & @CRLF & _
            @TAB & "句柄," & @CRLF & _
            @TAB & "组件宽度数组, 3 个元素" & @CRLF & _
            @TAB & "组件文本数组, 3 个元素" & @CRLF)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    ; 获取边框尺寸
    MemoWrite("水平边框宽度 .: " & _GUICtrlStatusBar_GetBordersHorz($g_hStatus))
    MemoWrite("垂直边框宽度 .: " & _GUICtrlStatusBar_GetBordersVert($g_hStatus))
    MemoWrite("矩形宽度 .....: " & _GUICtrlStatusBar_GetBordersRect($g_hStatus))

    ; 循环到用户退出.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUISetState(@SW_ENABLE, $g_hMainGUI)
    GUIDelete($hGUI)
EndFunc   ;==>Example

; 写脚本运行消息到备忘录控件
Func MemoWrite($sMessage = "")
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local $tInfo
    Switch $hWndFrom
        Case $g_hStatus
            Switch $iCode
                Case $NM_CLICK ; 用户在控件范围内点击鼠标左键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_CLICK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_DBLCLK ; 用户在控件内双击鼠标左键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_DBLCLK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_RCLICK ; 用户在控件范围内单击鼠标右键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_RCLICK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_RDBLCLK ; 用户在控件范围内双击鼠标右键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $SBN_SIMPLEMODECHANGE ; 简单模式改变
                    _DebugPrint("$SBN_SIMPLEMODECHANGE" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode)
                    ; 没有返回值
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @CRLF & _
            "+======================================================" & @CRLF & _
            "-->行号(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _
            "+======================================================" & @CRLF)
EndFunc   ;==>_DebugPrint

 楼主| 发表于 2021-2-24 21:57:50 | 显示全部楼层
感谢指点,解决了!
代码如下:
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>

Global $g_idMemo, $g_hMainGUI, $g_hStatus

Example()

Func Example()
    Local $hGUI
    Local $aText[3] = ["左对齐", @TAB & "居中", @TAB & @TAB & "右对齐"]
    Local $aParts[3] = [100, 175, -1]

    ; 创建 GUI
    $hGUI = GUICreate("(示例 3) 创建状态栏", 400, 300,-1,-1,BitOR($GUI_SS_DEFAULT_GUI,$WS_SIZEBOX ,$WS_MAXIMIZEBOX ) )

    ;设置组件与文本
    $g_hStatus = _GUICtrlStatusBar_Create($hGUI, $aParts, $aText)
    ; 创建备忘录控件
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    GUICtrlSendMsg($g_idMemo, $EM_SETREADONLY, True, 0)
    GUICtrlSetBkColor($g_idMemo, 0xFFFFFF)
    GUISetState(@SW_SHOW)


    GUIRegisterMsg($WM_SIZE, "WM_SIZE")


    MemoWrite("状态栏创建:" & @CRLF & _
            @TAB & "句柄," & @CRLF & _
            @TAB & "组件宽度数组, 3 个元素" & @CRLF & _
            @TAB & "组件文本数组, 3 个元素" & @CRLF)

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    ; 获取边框尺寸
    MemoWrite("水平边框宽度 .: " & _GUICtrlStatusBar_GetBordersHorz($g_hStatus))
    MemoWrite("垂直边框宽度 .: " & _GUICtrlStatusBar_GetBordersVert($g_hStatus))
    MemoWrite("矩形宽度 .....: " & _GUICtrlStatusBar_GetBordersRect($g_hStatus))

    ; 循环到用户退出.
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUISetState(@SW_ENABLE, $g_hMainGUI)
    GUIDelete($hGUI)
EndFunc   ;==>Example

; 写脚本运行消息到备忘录控件
Func MemoWrite($sMessage = "")
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local $tInfo
    Switch $hWndFrom
        Case $g_hStatus
            Switch $iCode
                Case $NM_CLICK ; 用户在控件范围内点击鼠标左键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_CLICK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_DBLCLK ; 用户在控件内双击鼠标左键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_DBLCLK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_RCLICK ; 用户在控件范围内单击鼠标右键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_RCLICK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $NM_RDBLCLK ; 用户在控件范围内双击鼠标右键
                    $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
                    $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
                    $iIDFrom = DllStructGetData($tInfo, "IDFrom")
                    $iCode = DllStructGetData($tInfo, "Code")
                    _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode & @CRLF & _
                            "-->项目规格:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
                            "-->项目数据:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
                            "-->X 坐标:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
                            "-->Y 坐标:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
                            "-->点击消息:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
                    Return True ; 处理鼠标点击, 制止系统默认处理
                    ; Return FALSE ;允许默认处理点击操作.
                Case $SBN_SIMPLEMODECHANGE ; 简单模式改变
                    _DebugPrint("$SBN_SIMPLEMODECHANGE" & @CRLF & "--> 控件句柄:" & @TAB & $hWndFrom & @CRLF & _
                            "-->控件 ID:" & @TAB & $iIDFrom & @CRLF & _
                            "-->操作代码:" & @TAB & $iCode)
                    ; 没有返回值
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
    ConsoleWrite( _
            "!===========================================================" & @CRLF & _
            "+======================================================" & @CRLF & _
            "-->行号(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _
            "+======================================================" & @CRLF)
EndFunc   ;==>_DebugPrint

; GUI 大小变化时, 调整状态栏
Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam, $lParam
    _GUICtrlStatusBar_Resize($g_hStatus)
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE
发表于 2021-2-24 21:28:05 | 显示全部楼层
状态栏没有对齐方式样式,可以试试内嵌带对齐样式的 Label 控件
看 _GUICtrlStatusBar_Resize()

评分

参与人数 1金钱 +40 收起 理由
anythinging + 40 很给力!

查看全部评分

发表于 2021-2-24 22:20:33 | 显示全部楼层
本帖最后由 gyp2000 于 2021-2-24 22:24 编辑
anythinging 发表于 2021-2-24 21:57
感谢指点,解决了!
代码如下:

你这编辑框不对,未能跟随改变大小
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROLL)  ; 22行
        GUICtrlSetResizing(-1, 102)  ;这里要添加: 设置窗口缩放时控件位置/大小的调整方式
 楼主| 发表于 2021-2-25 20:49:06 | 显示全部楼层
gyp2000 发表于 2021-2-24 22:20
你这编辑框不对,未能跟随改变大小
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 396, 274, $WS_VSCROL ...

感谢回复,这试了下加不加这句好象没区别
发表于 2021-2-26 00:04:24 | 显示全部楼层
anythinging 发表于 2021-2-25 20:49
感谢回复,这试了下加不加这句好象没区别

不添加的话,编辑框缩放异常。



本帖子中包含更多资源

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

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 12:31 , Processed in 0.103610 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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