找回密码
 加入
搜索
查看: 5098|回复: 17

[AU3基础] 关于父子窗口缩放问题涉及到控件的位置以及缩放,求大侠赐教(已解决)

 火.. [复制链接]
发表于 2018-4-2 11:15:36 | 显示全部楼层 |阅读模式
本帖最后由 cqboyqx 于 2018-4-7 19:13 编辑

关于父子窗口缩放涉及到控件的位置以及缩放问题,求大侠赐教
论坛找了很多大侠例子,都没有处理好,最终效果达到如果注释掉19行后的那种效果,不知能不能实现
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 539, 330, -1, -1,$WS_MAXIMIZEBOX+ $WS_MINIMIZEBOX+ $WS_SIZEBOX)
$Tab1 = GUICtrlCreateTab(8, 8, 513, 97)
GUICtrlSetResizing(-1,2+4+544)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
$Edit1 = GUICtrlCreateEdit("", 16, 40, 489, 50)
GUICtrlSetResizing(-1,2+4+544)
GUICtrlSetData(-1, "左上右不变,高度不变,随窗口变宽而变宽")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
GUICtrlCreateTabItem("")
GUISetState()

 $Form1_1 = GUICreate("", 539, 330, -2, -2, BitOr($WS_CHILD,$WS_TABSTOP), -1, $Form1)
   $Group1 = GUICtrlCreateGroup("Group1", 8, 112, 513, 185)
   GUICtrlSetResizing(-1,102)
   $ListView1 = GUICtrlCreateListView("", 16, 128, 370, 158);上下左右部变,随窗口同等比例变化
   GUICtrlSetResizing(-1,102)
   $Edit2 = GUICtrlCreateEdit("", 392, 128, 113, 161)
   GUICtrlSetResizing(-1,4+32+64+256)
   GUICtrlSetData(-1, "上下右不变,随窗口"&@CRLF&"拉宽移位,拉高而变高")
   GUICtrlCreateGroup("", -99, -99, 1, 1)
   GUISetState()
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

本帖子中包含更多资源

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

×
发表于 2018-4-2 11:41:38 | 显示全部楼层
不要第19行的$Form1父窗口参数行吗?
 楼主| 发表于 2018-4-2 11:57:08 | 显示全部楼层
回复 2# 志艺风云
就是要加19行那一行
发表于 2018-4-2 12:08:54 | 显示全部楼层
加个主控件宽度函数:
#include <WinAPI.au3>
_WinAPI_GetWindowRect ( $hWnd )
将该控件的宽度设为主窗口宽度减去你预留的

第二个也同理,浅见。感觉应该是可以设置样式自动变换吧?
发表于 2018-4-2 12:16:13 | 显示全部楼层
回复 3# cqboyqx


   如果第19行必须设置父窗口参数$Form1,那么我想到的方法比较复杂了,主要的原因是主窗口最大化、缩放等,$Form1_1窗口的大小没有变,所以控件也没有调整大小。
我想到的方法是加上主窗口的事件等。
                Case $GUI_EVENT_MAXIMIZE
                        GUISetState(@SW_MAXIMIZE, $Form1_1)
                Case $GUI_EVENT_RESTORE
                        GUISetState(@SW_RESTORE, $Form1_1)
 楼主| 发表于 2018-4-2 12:46:40 | 显示全部楼层
回复 5# 志艺风云

用你这个没有反应
 楼主| 发表于 2018-4-2 12:48:45 | 显示全部楼层
回复 4# 449199199
你这个怎么用,看有没有效果
发表于 2018-4-2 13:01:08 | 显示全部楼层
按理你试试,删除掉19行后面的 , $Form1是最简单的,子窗口设置成特殊的风格后使用没这么简单的啊。

你看看这贴
多层TAB可任意 拉动尺寸、最大化、还原,控件跟着变大
 楼主| 发表于 2018-4-2 13:10:15 | 显示全部楼层
回复 8# 志艺风云


    这个我用过了,控制不了控件的变化
发表于 2018-4-2 14:02:28 | 显示全部楼层
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 539, 330, -1, -1, $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX + $WS_SIZEBOX)
$Tab1 = GUICtrlCreateTab(8, 8, 513, 97)
GUICtrlSetResizing(-1, 2 + 4 + 544)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
$Edit1 = GUICtrlCreateEdit("", 16, 40, 489, 50)
GUICtrlSetResizing(-1, 2 + 4 + 544)
GUICtrlSetData(-1, "左上右不变,高度不变,随窗口变宽而变宽")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
GUICtrlCreateTabItem("")
GUISetState()

$Form1_1 = GUICreate("", 540, 212, -2, 100, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Form1)
$Group1 = GUICtrlCreateGroup("Group1", 8, 10, 513, 185)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$ListView1 = GUICtrlCreateListView("", 16, 25, 370, 158)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
$Edit2 = GUICtrlCreateEdit("", 392, 25, 113, 161)
GUICtrlSetData(-1, "上下右不变,随窗口##CRLF##拉宽移位,拉高而变高")
GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_RESIZED
                        RESIZED()
                Case $GUI_EVENT_MAXIMIZE
                        RESIZED()
                Case $GUI_EVENT_RESTORE
                        RESIZED()
        EndSwitch
WEnd

Func RESIZED()
        Local $aClientSize = WinGetClientSize($Form1)
        ; 主窗口客户区的高度和宽度.
        WinMove($Form1_1, "", Default, Default, $aClientSize[0], $aClientSize[1] - 100)
EndFunc   ;==>RESIZED
 楼主| 发表于 2018-4-2 14:28:26 | 显示全部楼层
回复 10# 志艺风云

没有达到那个效果,你这一拉主窗口,控件都跑了
发表于 2018-4-2 15:09:18 | 显示全部楼层
回复 11# cqboyqx


    你下载完整10楼的代码来试吗,我AutoIt版本 : 3.3.14.2,一点问题都没。
发表于 2018-4-2 15:44:20 | 显示全部楼层
回复 12# 志艺风云

你的代碼有效 他應該是點擊 著 沒放開 所以他看不到效果
 楼主| 发表于 2018-4-2 15:53:37 | 显示全部楼层
回复 10# 志艺风云

本帖子中包含更多资源

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

×
 楼主| 发表于 2018-4-2 15:55:08 | 显示全部楼层
回复 13# kk_lee69

大侠哈,这个确确实实不好弄哈
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 03:20 , Processed in 0.076187 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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