afan 发表于 2016-4-18 21:57:33

还是A版考虑得周到

回复chamlien
zldfsz 发表于 2016-4-18 21:08 http://www.autoitx.com/images/common/back.gif


    呵呵先拉动调整大小然后最小化 再还原看看~
我是一直不明白LZ是想要什么效果… 这种既不是状态栏又不是工具栏的,客户区基本控件直接GUICtrlSetResizing() 就可以完成,为何走那么远的弯路

zldfsz 发表于 2016-4-19 00:19:36

回复 16# afan


   呵呵~ 我也不明白~

chamlien 发表于 2016-4-19 09:53:04

回复 16# afan

弯路在于GUIRegisterMsg初次接触,GUIRegisterMsg被优先执行,所以乱了套...

chamlien 发表于 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

志艺风云 发表于 2016-4-20 22:04:21

原则上,如果界面可缩放的话,则需要对每个控件都设置缩放属性。

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

你看下我这个咯,每个控件都设置。
http://www.autoitx.com/thread-52029-1-1.html

chamlien 发表于 2016-4-21 23:46:48

回复 20# 志艺风云


    谢谢,原来$GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT 这些可以这样灵活运用,学习了。问题已完美解决,十分感谢!
页: 1 [2]
查看完整版本: 【已解决】关于GUI内部控件大小控制,如何解决窗口缩放后控件重叠的问题?