回复chamlien
zldfsz 发表于 2016-4-18 21:08 http://www.autoitx.com/images/common/back.gif
呵呵先拉动调整大小然后最小化 再还原看看~
我是一直不明白LZ是想要什么效果… 这种既不是状态栏又不是工具栏的,客户区基本控件直接GUICtrlSetResizing() 就可以完成,为何走那么远的弯路 回复 16# afan
呵呵~ 我也不明白~ 回复 16# afan
弯路在于GUIRegisterMsg初次接触,GUIRegisterMsg被优先执行,所以乱了套... 本帖最后由 chamlien 于 2016-4-19 10:01 编辑
回复 15# zldfsz
以上代码,包括我14楼贴出的代码,都有一个共同的问题:
窗口最大化,接着最小化,再从任务栏还原,这时input框超出group框了。
在_ChangeSize()函数里添加consolewrite测试,发现只要窗口变大,最小化之后,input的宽度其实都已经变成了700多,导致窗口还原之后input宽度还是700多,一直不解.... 你这样用是没意义的啊,所以才达不到你想要的效果,你实际上是不是想要这样的效果。
#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
原则上,如果界面可缩放的话,则需要对每个控件都设置缩放属性。
GUICtrlSetResizing
设置窗口缩放时控件位置/大小的调整方式.
帮助说明是这样说的,当 GUI 窗口被调整大小时, 其所属控件也会有相应变化,至于如何变化则是由本函数定义.
你只定义一个控件是没有用的,各控件被调整时是相对的啊,一个控件设置属性一个不设置,那么调整大小时,相应变化肯定不同了啊。
你看下我这个咯,每个控件都设置。
http://www.autoitx.com/thread-52029-1-1.html 回复 20# 志艺风云
谢谢,原来$GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT 这些可以这样灵活运用,学习了。问题已完美解决,十分感谢!
页:
1
[2]