runningwater 发表于 2008-7-31 08:49:00

如何拖动无边框窗体?

一个无边框窗体,上面只有一个文本框,也就是说用户实际能看到的、操作的只有这个文本框。

请问怎么能让用户移动它(窗口)的位置呢?

[ 本帖最后由 runningwater 于 2008-8-4 10:06 编辑 ]

pcbar 发表于 2008-7-31 09:48:14

参考这个
http://www.autoitx.com/forum.php?mod=viewthread&tid=633&extra=page%3D3
拖动上面的文字可移动窗口

runningwater 发表于 2008-7-31 11:03:56

原帖由 pcbar 于 2008-7-31 09:48 发表 http://www.autoitx.com/images/common/back.gif
参考这个
http://www.autoitx.com/forum.php?mod=viewthread&tid=633&extra=page%3D3
拖动上面的文字可移动窗口

谢谢!
$lblCaption = GUICtrlCreateLabel("=", 0, 0, 12, 446, -1, $GUI_WS_EX_PARENTDRAG)
-1是关键哈?
我的窗体上只显示了一个文本框,似乎是不能加入这个样式,在不加其他控件的情况下,能否实现窗体的移动呢?

[ 本帖最后由 runningwater 于 2008-7-31 11:13 编辑 ]

pcbar 发表于 2008-7-31 18:12:51

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 300, 50, 193, 125, $WS_POPUP)
$Input1 = GUICtrlCreateInput("这里输入数字", 24, 16, 201, 21)
GUISetState(@SW_SHOW)
#EndRegion ### START Koda GUI section ### Form=

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_PRIMARYDOWN
                        mouseCHK()
        EndSwitch
WEnd

Func mouseCHK()
        $MS = GUIGetCursorInfo($Form1)
        If $MS = $Input1 Then move()
EndFunc   ;==>mouseCHK
Func move()
        Local $PosDiff, $MousePos, $WinPos
        $MousePos = MouseGetPos()
        $WinPos = WinGetPos($Form1, "")
        $PosDiff = $WinPos - $MousePos
        $PosDiff = $WinPos - $MousePos
        While _IsPressed("01", DllOpen("user32.dll"))
                $MousePos = MouseGetPos()
                WinMove($Form1, "", $MousePos + $PosDiff, $MousePos + $PosDiff)
                Sleep(10)
        WEnd
EndFunc   ;==>move

runningwater 发表于 2008-8-1 11:08:00

回复 4# pcbar 的帖子

太好了,谢谢~

runningwater 发表于 2008-8-1 11:09:12

不允许修改了,请管理员帮忙移动到已解决,谢谢~

sanhen 发表于 2008-8-2 18:25:27

pcbar兄的太复杂了。。。

这个更加简单。。。
GUIRegisterMsg($WM_NCHITTEST,"WM_NCHITTEST")

Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
if ($hWnd = $GUI ) and ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
EndFunc

dnbj2010 发表于 2010-3-1 15:02:31

1,用WinMove的方法,鼠标按下时截获鼠标坐标变量达到窗体随鼠标运动的目的。但对于移动有限制的窗体,
由于鼠标的自由移动,此代码可以突破对窗体的移动限制。
2,用$HTCAPTION的方法,代码更简洁些,而且保持了窗体的移动限制有效。但也有一个问题,就是发送$HTCAPTION之后,窗体的样式被重绘,已定制的样式失效。难怪都去做假标题栏。窗体伸缩就费劲了。
一句话,费这么多精力,总是不完美。

rikthhpgf2005 发表于 2010-3-1 15:12:53

:face (35):过路看看

紫色风林 发表于 2011-8-16 00:38:24

pcbar兄的太复杂了。。。

这个更加简单。。。
sanhen 发表于 2008-8-2 18:25 http://www.autoitx.com/images/common/back.gif


    为什么不写全啊,搞不懂

jsgh1983 发表于 2011-10-19 10:49:01

sanhen 的代码很强大,解决了好长时间没解决的问题!

menfan1 发表于 2011-10-19 12:29:07

收藏,备用。。

.個朲綉√ 发表于 2011-10-20 14:52:22

强帖留名,已备不时之需

liyi-softs 发表于 2011-11-30 05:20:14

好东西。先收下了。

zghwelcome 发表于 2016-5-4 13:41:31

pcbar兄的太复杂了。。。

这个更加简单。。。
sanhen 发表于 2008-8-2 18:25 http://www.autoitx.com/images/common/back.gif

方法相当好
页: [1] 2
查看完整版本: 如何拖动无边框窗体?