找回密码
 加入
搜索
查看: 21365|回复: 35

[AU3基础] 如何指定message box的坐标

 火... [复制链接]
发表于 2010-3-12 21:26:11 | 显示全部楼层 |阅读模式
悬赏50金钱未解决
默认在中间显示
如何指定msgbox的坐标呢?

发表于 2010-3-12 21:30:51 | 显示全部楼层
用 GUICreate 画一个,不就可以任意指定坐标啦!
 楼主| 发表于 2010-3-12 22:17:37 | 显示全部楼层
用 GUICreate 画一个,不就可以任意指定坐标啦!
水木子 发表于 2010-3-12 21:30



    -_-!! GUI自己画的不算....
发表于 2010-3-12 22:26:20 | 显示全部楼层
-_-!! GUI自己画的不算....
gapkiller 发表于 2010-3-12 22:17


要算、要算!嘿嘿!


说真的,除了自己写函数以外,暂时没有想到其他办法。
发表于 2010-3-12 22:28:51 | 显示全部楼层
美女,弹出来再移动算不算,哈
发表于 2010-3-12 22:31:20 | 显示全部楼层
美女,弹出来再移动算不算,哈
afan 发表于 2010-3-12 22:28

呵呵!这个办法我也想到了,估计也不算吧!
发表于 2010-3-12 23:56:06 | 显示全部楼层
要是我就自己画了
发表于 2010-3-13 00:48:02 | 显示全部楼层
内置MsgBox函数实际是调用了User32.dll中的MessageBoxW函数,这个API的原型中没有哪个参数是指定坐标用的。自己创建一个GUI界面,或调用Timer函数在弹出之后再移动,只能这样解决。
 楼主| 发表于 2010-3-13 08:25:59 | 显示全部楼层
我是想说, 应该还是有办法来控制坐标的.
如果连续弹出两个msgbox, 那么第二个msgbox是不会重叠在一起的.
这就说明还是有个什么东西在操纵着这个窗口坐标
或许是注册表里面的什么,或许是别的什么
发表于 2010-3-13 10:01:17 | 显示全部楼层
我是想说, 应该还是有办法来控制坐标的.
如果连续弹出两个msgbox, 那么第二个msgbox是不会重叠在一起的.
...
gapkiller 发表于 2010-3-13 08:25

楼主的专研精神值得学习啊!
 楼主| 发表于 2010-3-13 10:10:35 | 显示全部楼层
楼主的专研精神值得学习啊!
水木子 发表于 2010-3-13 10:01



    果酱果酱了
发表于 2010-3-13 11:11:38 | 显示全部楼层
移动的方法还行
发表于 2010-3-13 14:51:02 | 显示全部楼层
本帖最后由 afan 于 2010-3-13 16:18 编辑

乾坤大挪移
;
Global $Guititle = 'Msgbox test'
$Form1 = GUICreate($Guititle, 220, 100, 80, 100)
$Button1 = GUICtrlCreateButton('test', 150, 35, 60, 20)
GUISetState()
While 1
        Switch GUIGetMsg()
                Case -3
                        Exit
                Case $Button1
                        MsgboxM(0, 'test', '我将跟随主窗口~')
                        MsgboxM(0, 'test', '我将定位到500,200的位置', 500, 200)
        EndSwitch
WEnd

Func MsgboxM($flag, $title, $text, $x = '', $y = '')
        Global $__title = $title, $__text = $text, $__x = $x, $__y = $y
        Global $Timer = DllCallbackRegister('Timer', 'int', 'hwnd;uint;uint;dword')
        Global $TimerDLL = DllCall('user32.dll', 'uint', 'SetTimer', 'hwnd', 0, 'uint', _
                        0, 'int', 1, 'ptr', DllCallbackGetPtr($Timer))
        Sleep(3)
        MsgBox($flag, $title, $text)
EndFunc   ;==>MsgboxM

Func Timer($hwnd, $uiMsg, $idEvent, $dwTime)
        If $idEvent = $TimerDLL[0] Then
                $Wpos = WinGetPos($Guititle)
                Local $x = $Wpos[0] + 60, $y = $Wpos[1] + 10
                If StringIsDigit($__x) And StringIsDigit($__y) Then Local $x = $__x, $y = $__y
                If WinMove($__title, $__text, $x, $y) <> 0 Then
                        DllClose($TimerDLL)
                        DllCallbackFree($Timer)
                EndIf
        EndIf
EndFunc   ;==>Timer

评分

参与人数 2金钱 +70 收起 理由
gapkiller + 40
水木子 + 30 如来神掌!!!哈哈!

查看全部评分

 楼主| 发表于 2010-3-13 17:10:20 | 显示全部楼层
乾坤大挪移
;
afan 发表于 2010-3-13 14:51



   
能否解释一下
    If $idEvent = $TimerDLL[0] Then...
是什么意思.
发表于 2010-3-13 17:23:18 | 显示全部楼层
就是指前面创建的'time'回调函数第3个参数符合Dllcall的返回值…
只知大概意思~

如果要用专业术语解释那得P版出面…
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-25 13:30 , Processed in 0.083065 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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