newuser 发表于 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 = X 坐标
      ;$array = Y 坐标
      ;$array = 宽度
       ; $array = 高度
MsgBox(0,'',$Form2Pos&@CRLF&$Form2Pos)
GUICtrlCreateGroup("可选软件安装",$Form2Pos+1,$Form2Pos+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 = X 坐标
      ;$array = Y 坐标
      ;$array = 宽度
       ; $array = 高度

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

Func Quit()
    Exit
EndFunc

newuser 发表于 2010-8-17 09:27:52

回复 1# newuser
悬浮等待中...

3mile 发表于 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 = X 坐标
      ;$array = Y 坐标
      ;$array = 宽度
       ; $array = 高度
MsgBox(0,'',$Form2Pos&@CRLF&$Form2Pos)
GUICtrlCreateGroup("可选软件安装",0,$Form2Pos-118,170,150);若用$Form2Pos+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 = X 坐标
      ;$array = Y 坐标
      ;$array = 宽度
       ; $array = 高度

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

Func Quit()
    Exit
EndFunc

Ziya 发表于 2010-8-17 09:42:02

显示了,但是位置不对吧
GUICtrlCreateGroup("可选软件安装",1,106,165,150)
试试这个

newuser 发表于 2010-8-17 10:11:46

回复 3# 3mile
谢谢,OK了.
但是阁下的坐标值是如何计算的呢?
对于$Form2Pos+1,$Form2Pos+102我是这了理解的:
$Form2Pos是$Form2的X坐标,那么加1当Group2的X坐标可以啊?
$Form2Pos是$Form2的Y坐标,那么加上第一个Group的高度在多一点也是可以做Group2的Y ?
但是怎么都出界了呢?
而阁下的$Form2Pos-118里的118是怎么计算的呢?

3mile 发表于 2010-8-17 11:00:42

回复 5# newuser
;WINGETPOS()获得的座标是相对于屏幕的座标。
;指定GROUP座标相对于GUI的座标。假定窗口Y轴为0,则$Form2Pos-($Form2Pos-100)为需要的座标。此100为GROUP1的高度。

newuser 发表于 2010-8-17 14:43:15

回复 6# 3mile
很难在头脑中有个立体感觉,当个公式记住吧!
谢谢您的回答!

G,man。 发表于 2010-8-18 14:28:44

沾光学习。
页: [1]
查看完整版本: [已解决]关于窗口坐标的问题?