gapkiller 发表于 2010-3-12 21:26:11

如何指定message box的坐标

默认在中间显示
如何指定msgbox的坐标呢?

水木子 发表于 2010-3-12 21:30:51

用 GUICreate 画一个,不就可以任意指定坐标啦!:face (1):

gapkiller 发表于 2010-3-12 22:17:37

用 GUICreate 画一个,不就可以任意指定坐标啦!
水木子 发表于 2010-3-12 21:30 http://www.autoitx.com/images/common/back.gif


    -_-!! GUI自己画的不算....

水木子 发表于 2010-3-12 22:26:20

-_-!! GUI自己画的不算....
gapkiller 发表于 2010-3-12 22:17 http://www.autoitx.com/images/common/back.gif

要算、要算!嘿嘿!:face (1):


说真的,除了自己写函数以外,暂时没有想到其他办法。

afan 发表于 2010-3-12 22:28:51

美女,弹出来再移动算不算,哈

水木子 发表于 2010-3-12 22:31:20

美女,弹出来再移动算不算,哈
afan 发表于 2010-3-12 22:28 http://www.autoitx.com/images/common/back.gif
呵呵!这个办法我也想到了,估计也不算吧!

nmgwddj 发表于 2010-3-12 23:56:06

要是我就自己画了:face (22):

pusofalse 发表于 2010-3-13 00:48:02

内置MsgBox函数实际是调用了User32.dll中的MessageBoxW函数,这个API的原型中没有哪个参数是指定坐标用的。自己创建一个GUI界面,或调用Timer函数在弹出之后再移动,只能这样解决。

gapkiller 发表于 2010-3-13 08:25:59

我是想说, 应该还是有办法来控制坐标的.
如果连续弹出两个msgbox, 那么第二个msgbox是不会重叠在一起的.
这就说明还是有个什么东西在操纵着这个窗口坐标
或许是注册表里面的什么,或许是别的什么

水木子 发表于 2010-3-13 10:01:17

我是想说, 应该还是有办法来控制坐标的.
如果连续弹出两个msgbox, 那么第二个msgbox是不会重叠在一起的.
...
gapkiller 发表于 2010-3-13 08:25 http://www.autoitx.com/images/common/back.gif
楼主的专研精神值得学习啊!:face (27):

gapkiller 发表于 2010-3-13 10:10:35

楼主的专研精神值得学习啊!
水木子 发表于 2010-3-13 10:01 http://www.autoitx.com/images/common/back.gif


    果酱果酱了:face (27):

menfan1 发表于 2010-3-13 11:11:38

移动的方法还行

afan 发表于 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 Then
                $Wpos = WinGetPos($Guititle)
                Local $x = $Wpos + 60, $y = $Wpos + 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

gapkiller 发表于 2010-3-13 17:10:20

乾坤大挪移
;
afan 发表于 2010-3-13 14:51 http://www.autoitx.com/images/common/back.gif


   
能否解释一下
    If $idEvent = $TimerDLL Then...
是什么意思.

afan 发表于 2010-3-13 17:23:18

就是指前面创建的'time'回调函数第3个参数符合Dllcall的返回值…
只知大概意思~

如果要用专业术语解释那得P版出面… :face (32):
页: [1] 2 3
查看完整版本: 如何指定message box的坐标