找回密码
 加入
搜索
查看: 4735|回复: 7

[GUI管理] [已解决]关于窗口坐标的问题?

  [复制链接]
发表于 2010-8-17 09:05:47 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2010-8-17 14:44 编辑

为什么$Form2中的第2个Group不显示?见代码:
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
OnAutoItExitRegister("Quit");注册1个当AutoIt退出时执行的函数Quit

$Form2=GUICreate("安装选项",170,273,-1,-1)
GUICtrlCreateGroup("推荐软件安装",-1,-1,170,100)
GUICtrlCreateGroup("",-99,-99,1,1)
Local $Form2Pos=WinGetPos($Form2)
                ;返回一个含有下列信息的4维数组: 
        ;$array[0] = X 坐标 
        ;$array[1] = Y 坐标  
        ;$array[2] = 宽度  
       ; $array[3] = 高度  
MsgBox(0,'',$Form2Pos[0]&@CRLF&$Form2Pos[1])
GUICtrlCreateGroup("可选软件安装",$Form2Pos[0]+1,$Form2Pos[1]+102,170,150)
GUICtrlCreateGroup("",-99,-99,1,1)
$Form1=GUICreate ( "我的第一个窗口", 484, 273,-1,-1) 
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
$check4=GUICtrlCreateCheckbox("安装", 20,235,50,25)
GUICtrlSetOnEvent($check4, "check4")
GUISetState (@SW_SHOW,$Form1)

While 1
  Sleep(1000)
WEnd

Func check4()
        Local $Form1Pos=WinGetPos($Form1)
                ;返回一个含有下列信息的4维数组: 
        ;$array[0] = X 坐标 
        ;$array[1] = Y 坐标  
        ;$array[2] = 宽度  
       ; $array[3] = 高度  

        If GUICtrlRead($check4)=$GUI_CHECKED Then
                WinMove($Form2,"",$Form1Pos[0]+$Form1Pos[2],$Form1Pos[1])
                                ;WinMove ( "窗口标题", "窗口文本", X坐标, Y坐标 [, 宽度 [, 高度[,速度]]] ) 
                GUISetState(@SW_SHOW,$Form2)
        Else
                GUISetState(@SW_HIDE,$Form2)
        EndIf
EndFunc

Func Quit()
    Exit
EndFunc

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2010-8-17 09:27:52 | 显示全部楼层
回复 1# newuser
悬浮等待中...
发表于 2010-8-17 09:39:35 | 显示全部楼层
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
OnAutoItExitRegister("Quit");注册1个当AutoIt退出时执行的函数Quit

$Form2=GUICreate("安装选项",170,273,-1,-1)
GUICtrlCreateGroup("推荐软件安装",-1,-1,170,100)
GUICtrlCreateGroup("",-99,-99,1,1)
Local $Form2Pos=WinGetPos($Form2)
                ;返回一个含有下列信息的4维数组: 
        ;$array[0] = X 坐标 
        ;$array[1] = Y 坐标  
        ;$array[2] = 宽度  
       ; $array[3] = 高度  
MsgBox(0,'',$Form2Pos[0]&@CRLF&$Form2Pos[1])
GUICtrlCreateGroup("可选软件安装",0,$Form2Pos[1]-118,170,150);若用$Form2Pos[0]+1作为左侧,则超出显示范围。
GUICtrlCreateGroup("",-99,-99,1,1)
$Form1=GUICreate ( "我的第一个窗口", 484, 273,-1,-1) 
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
$check4=GUICtrlCreateCheckbox("安装", 20,235,50,25)
GUICtrlSetOnEvent($check4, "check4")
GUISetState (@SW_SHOW,$Form1)

While 1
  Sleep(1000)
WEnd

Func check4()
        Local $Form1Pos=WinGetPos($Form1)
                ;返回一个含有下列信息的4维数组: 
        ;$array[0] = X 坐标 
        ;$array[1] = Y 坐标  
        ;$array[2] = 宽度  
       ; $array[3] = 高度  

        If GUICtrlRead($check4)=$GUI_CHECKED Then
                WinMove($Form2,"",$Form1Pos[0]+$Form1Pos[2],$Form1Pos[1])
                                ;WinMove ( "窗口标题", "窗口文本", X坐标, Y坐标 [, 宽度 [, 高度[,速度]]] ) 
                GUISetState(@SW_SHOW,$Form2)
        Else
                GUISetState(@SW_HIDE,$Form2)
        EndIf
EndFunc

Func Quit()
    Exit
EndFunc

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-17 09:42:02 | 显示全部楼层
显示了,但是位置不对吧
GUICtrlCreateGroup("可选软件安装",1,106,165,150)

试试这个
 楼主| 发表于 2010-8-17 10:11:46 | 显示全部楼层
回复 3# 3mile
谢谢,OK了.
但是阁下的坐标值是如何计算的呢?
对于$Form2Pos[0]+1,$Form2Pos[1]+102我是这了理解的:
$Form2Pos[0]是$Form2的X坐标,那么加1当Group2的X坐标可以啊?
$Form2Pos[1]是$Form2的Y坐标,那么加上第一个Group的高度在多一点也是可以做Group2的Y ?
但是怎么都出界了呢?
而阁下的$Form2Pos[1]-118里的118是怎么计算的呢?
发表于 2010-8-17 11:00:42 | 显示全部楼层
回复 5# newuser
;WINGETPOS()获得的座标是相对于屏幕的座标。
;指定GROUP座标相对于GUI的座标。假定窗口Y轴为0,则$Form2Pos[1]-($Form2Pos[1]-100)为需要的座标。此100为GROUP1的高度。
 楼主| 发表于 2010-8-17 14:43:15 | 显示全部楼层
回复 6# 3mile
很难在头脑中有个立体感觉,当个公式记住吧!
谢谢您的回答!
发表于 2010-8-18 14:28:44 | 显示全部楼层
沾光学习。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-11 20:04 , Processed in 0.089115 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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