找回密码
 加入
搜索
查看: 6825|回复: 12

[AU3基础] 关于窗体控件相对屏幕的坐标(也可以称绝对坐标)的图解

  [复制链接]
发表于 2011-3-5 16:16:40 | 显示全部楼层 |阅读模式
个人自己所画,可能不太清楚,如图所示,有问题可以留言。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

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

查看全部评分

 楼主| 发表于 2011-3-5 16:18:30 | 显示全部楼层
忘了说明,因为是取得相对屏幕的坐标,因此不受屏幕分辨率的影响。希望对大家有所帮助。
发表于 2011-3-5 17:02:22 | 显示全部楼层
很直观明了,表扬一下
 楼主| 发表于 2011-3-5 17:07:35 | 显示全部楼层
谢谢,供新入门的朋友参考
发表于 2011-3-5 19:59:53 | 显示全部楼层
我觉得可以拿来做远程桌面控制使用,但是可能消耗CPU比较厉害
发表于 2011-3-5 21:04:34 | 显示全部楼层
放到资料区就好了,再画个相对坐标、点击坐标图吧。。。。
发表于 2011-3-5 22:41:13 | 显示全部楼层
看到这个,正好遇到个这方面的问题请教一下:如下代码创建的右键菜单,本来想让它建在explorer窗口的地址栏下方的,但怎么老是位置要靠上一点,定位不是那么准呢

Run("Explorer")
Sleep(500)
HotKeySet("^d", "DirHotList")
While 1
        Sleep(200)
WEnd

Func DirHotList()
        $hwdDirMenu = GUICreate("", 100, 100, -1000, -1000, -1, -1,WinGetHandle(AutoItWinGetTitle()))
        
        $FileMenu = GUICtrlCreateContextMenu()
        $Menu1 = GUICtrlCreateMenuItem("Menu1", $FileMenu)
        $Exit = GUICtrlCreateMenuItem("Exit", $FileMenu)
        GUISetState()
        ShowMenu($hwdDirMenu, $FileMenu)

        While True
                $msg = GUIGetMsg()
                Switch $msg
                        Case -3
                                Exit
                        Case $Menu1
                                MsgBox(0,0,"ok")
                        Case $Exit
                                Exit
                EndSwitch
        WEnd
        GUIDelete()
EndFunc

Func ShowMenu($hWnd, $nContextID)
        Local $WinPos, $CtrlPos, $moPos[2], $hMenu, $hwdTopMost
        
        $hwdTopMost = WinGetHandle("[CLASS:ExploreWClass]")
        $WinPos = WinGetPos($hwdTopMost)
        $CtrlPos = ControlGetPos($hwdTopMost, "", "Edit1")
        $moPos[0] = $WinPos[0] + $CtrlPos[0]
        $moPos[1] = $WinPos[1] + $CtrlPos[1] + $CtrlPos[3]   ;<===加上这个$ctrlPos[3]:控件宽度,本来应该在控件下方了,结果还不是呢
        
        
        $hMenu = GUICtrlGetHandle($nContextID)
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0)
EndFunc
发表于 2011-3-5 22:48:39 | 显示全部楼层
图很详细呀。。。
发表于 2011-3-5 23:02:46 | 显示全部楼层
本帖最后由 afan 于 2011-3-5 23:06 编辑

LZ说明的内容不错,就是图做出了很难分辨图像的选择后的效果,类似按了Ctrl+A _ _||

回复 7# happytc


    如果你想显示在地址栏下方,应该获取 ComboBox1 ,而不是 Edit1 ~ 这还不是问题的主要原因。你需要获取标题栏高度及边框宽度…
Func ShowMenu($hWnd, $nContextID)
        Local $WinPos, $CtrlPos, $moPos[2], $hMenu, $hwdTopMost
        $hwdTopMost = WinGetHandle("[CLASS:ExploreWClass]")
        $WinPos = WinGetPos($hwdTopMost)
        $CtrlPos = ControlGetPos($hwdTopMost, "", "ComboBox1")
        $moPos[0] = $WinPos[0] + $CtrlPos[0] + 4 ;边框宽
        $moPos[1] = $WinPos[1] + $CtrlPos[1] + $CtrlPos[3] + 30 ;标题栏高
        $hMenu = GUICtrlGetHandle($nContextID)
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0)
EndFunc
发表于 2011-3-5 23:21:04 | 显示全部楼层
呵,怎么忘了这两个和值呢,果然,加上标题栏和边框,就对了

Func ShowMenu($hWnd, $nContextID)
        Local $WinPos, $CtrlPos, $moPos[2], $hMenu, $hwdTopMost
        
        $hwdTopMost = WinGetHandle("[CLASS:ExploreWClass]")
        $WinPos = WinGetPos($hwdTopMost)
        $WinCaption = _winapi_GetSystemMetrics(4) ;SM_CYCAPTION
        $WinBorder = _WinAPI_GetSystemMetrics(5) ;SM_CXBORDER

        $CtrlPos = ControlGetPos($hwdTopMost, "", "ComboBox1")
        $moPos[0] = $WinPos[0] + $CtrlPos[0]
        $moPos[1] = $WinPos[1] + $CtrlPos[1] + $CtrlPos[3] + $WinCaption + $WinBorder
        
        
        $hMenu = GUICtrlGetHandle($nContextID)
        DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $moPos[0], "int", $moPos[1], "hwnd", $hWnd, "ptr", 0)
EndFunc
发表于 2011-3-5 23:26:46 | 显示全部楼层
不过说实话,我连是为经常用到的这些常量在那个#Include里头痛不已,象上面的$SM_CYCAPTION
我都是直接上微软网上直接查值,有什么快捷的方式知道某个WinAPI里的常量在au3的那个#include的里?
 楼主| 发表于 2011-3-18 13:21:38 | 显示全部楼层
说明,如果窗体有工具栏,或者还有菜单栏的话,那上面的图示就不准确了,上面的图示之是简单的说明在软件安装安装过程中的界面。
发表于 2011-3-18 20:43:26 | 显示全部楼层
大哥真亏你想得出来这么画,只定义左上角xy和长宽足以,还用的着四个边来搞?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 12:05 , Processed in 0.088515 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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