找回密码
 加入
搜索
楼主: chamlien

[GUI管理] 【已解决】关于GUI内部控件大小控制,如何解决窗口缩放后控件重叠的问题?

 火.. [复制链接]
发表于 2016-4-18 21:57:33 | 显示全部楼层
还是A版考虑得周到

回复  chamlien
zldfsz 发表于 2016-4-18 21:08



    呵呵  先拉动调整大小  然后最小化 再还原看看~
我是一直不明白LZ是想要什么效果… 这种既不是状态栏又不是工具栏的,客户区基本控件直接GUICtrlSetResizing() 就可以完成,为何走那么远的弯路
发表于 2016-4-19 00:19:36 | 显示全部楼层
回复 16# afan


   呵呵~ 我也不明白~
 楼主| 发表于 2016-4-19 09:53:04 | 显示全部楼层
回复 16# afan

弯路在于GUIRegisterMsg初次接触,GUIRegisterMsg被优先执行,所以乱了套...
 楼主| 发表于 2016-4-19 10:00:14 | 显示全部楼层
本帖最后由 chamlien 于 2016-4-19 10:01 编辑

回复 15# zldfsz


    以上代码,包括我14楼贴出的代码,都有一个共同的问题:
           窗口最大化,接着最小化,再从任务栏还原,这时input框超出group框了。

在_ChangeSize()函数里添加consolewrite测试,发现只要窗口变大,最小化之后,input的宽度其实都已经变成了700多,导致窗口还原之后input宽度还是700多,一直不解....
发表于 2016-4-20 21:41:08 | 显示全部楼层
你这样用是没意义的啊,所以才达不到你想要的效果,你实际上是不是想要这样的效果。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 784, 452, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP))
GUISetOnEvent($GUI_EVENT_CLOSE, "_MainSwitch")
$Group1 = GUICtrlCreateGroup("Test", 10, 10, 520, 150)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
$Input1 = GUICtrlCreateInput("Input1", 96, 49, 330, 21)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
$Label1 = GUICtrlCreateLabel("Label1", 48, 49, 36, 17)
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$Button1 = GUICtrlCreateButton("Button1", 438, 49, 75, 25)
GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 540, 10, 235, 150)
GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
GUIRegisterMsg(0x24, "WM_GETMINMAXINFO") ; 限制窗口的大小
#EndRegion ### END Koda GUI section ###

While 1
        Sleep(100)
WEnd

Func _MainSwitch()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        GUIDelete($Form1)
                        Exit
        EndSwitch
EndFunc   ;==>_MainSwitch

; 限制窗口的大小
Func WM_GETMINMAXINFO($MsgBox, $Msg, $wParam, $lparam)
        Local $tBuffer = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lparam)
        DllStructSetData($tBuffer, 7, 600);限制窗口的最小宽度
        DllStructSetData($tBuffer, 8, 250);限制窗口的最小高度
        ;DllStructSetData($tBuffer, 9, 1024);限制窗口的最大宽度
        ;DllStructSetData($tBuffer, 10, 768);限制窗口的最大宽度
        Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_GETMINMAXINFO

评分

参与人数 1金钱 +16 收起 理由
chamlien + 16 大概看了一下好像可以,明天详细看看

查看全部评分

发表于 2016-4-20 22:04:21 | 显示全部楼层
原则上,如果界面可缩放的话,则需要对每个控件都设置缩放属性。

GUICtrlSetResizing
设置窗口缩放时控件位置/大小的调整方式.
帮助说明是这样说的,当 GUI 窗口被调整大小时, 其所属控件也会有相应变化,至于如何变化则是由本函数定义.
你只定义一个控件是没有用的,各控件被调整时是相对的啊,一个控件设置属性一个不设置,那么调整大小时,相应变化肯定不同了啊。

你看下我这个咯,每个控件都设置。
http://www.autoitx.com/thread-52029-1-1.html
 楼主| 发表于 2016-4-21 23:46:48 | 显示全部楼层
回复 20# 志艺风云


    谢谢,原来$GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT 这些可以这样灵活运用,学习了。问题已完美解决,十分感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 07:20 , Processed in 0.078091 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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