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

[GUI管理] [已解决]如何让子窗口跟随父窗口移动

 火.. [复制链接]
发表于 2009-8-12 21:04:36 | 显示全部楼层 |阅读模式
本帖最后由 a62105400 于 2010-11-29 18:23 编辑

即开了子窗口后,移动父窗口子窗口在父窗口的位子不变 ,跟着移动??
求助各位大婶
发表于 2009-8-12 21:31:11 | 显示全部楼层
本帖最后由 afan 于 2009-8-12 21:33 编辑

呵呵,这里大婶可能稀有...

http://www.autoitx.com/forum.php?mod=viewthread&tid=2624
发表于 2009-8-12 21:37:56 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 100, 100, 242, 174)
GUISetState(@SW_SHOW)
$Form2 = GUICreate("Form2", 294, 164, 192, 124)
GUISetState(@SW_SHOW)
While 1
        $XY = WinGetPos($Form1)
                        $XY2 = WinGetPos($Form2)
                        If $XY2[0] <> $XY[0] Or $XY2[1] <> $XY[1] Then
                                WinMove($Form1, "", $XY2[0]+50, $XY2[1]+50)
                                WinSetOnTop('Form1','',1)
                        EndIf
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

评分

参与人数 1金钱 +15 贡献 +10 收起 理由
afan + 15 + 10

查看全部评分

 楼主| 发表于 2009-8-12 21:54:33 | 显示全部楼层
楼上两位  think you very much
发表于 2010-7-16 17:30:00 | 显示全部楼层
$Form2 = GUICreate("Form2", 294, 164, 192, 124,"","",$Form1)
发表于 2010-7-16 18:10:32 | 显示全部楼层
为什么不重写WM_SIZE消息?每次循环都设置一次浪费性能……

评分

参与人数 1金钱 +9 收起 理由
lynfr8 + 9 很棒的见解

查看全部评分

发表于 2010-7-16 18:47:38 | 显示全部楼层
为什么不重写WM_SIZE消息?每次循环都设置一次浪费性能……
78391493 发表于 2010-7-16 18:10



    楼上不妨写个例子和大家分享下
发表于 2010-7-17 06:02:06 | 显示全部楼层
LS写个例子和大家分享下...
发表于 2010-7-17 08:24:58 | 显示全部楼层
过来学习的。。顺便帮LZ顶上
发表于 2010-7-19 07:10:43 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 100, 100, 242, 174)
GUIRegisterMsg($WM_MOVE, "WM_MOVE")
GUIRegisterMsg($WM_SIZE, "MY_MOVE")
GUISetState(@SW_SHOW)
$Form2 = GUICreate("Form2", 294, 164, 192, 124)
GUISetState(@SW_SHOW)

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

Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
        $XY = WinGetPos($Form1)
        $XY2 = WinGetPos($Form2)
        WinMove($Form1, "", $XY2[0]+50, $XY2[1]+50)
        WinSetOnTop('Form1','',1)
EndFunc

评分

参与人数 1威望 +2 金钱 +25 收起 理由
afan + 2 + 25

查看全部评分

发表于 2010-7-20 09:44:11 | 显示全部楼层
MY_MOVE()呢?
发表于 2010-7-20 12:41:45 | 显示全部楼层
MY_MOVE()是干什么的呢?
发表于 2012-4-25 21:11:53 | 显示全部楼层
学习中。很有启发
发表于 2012-10-25 16:12:58 | 显示全部楼层
值得学习。呵呵
发表于 2012-11-20 21:58:02 | 显示全部楼层
记号上,认真学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 18:35 , Processed in 0.078830 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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