找回密码
 加入
搜索
查看: 6544|回复: 19

如何拖动无边框窗体?

[复制链接]
发表于 2008-7-31 08:49:00 | 显示全部楼层 |阅读模式
一个无边框窗体,上面只有一个文本框,也就是说用户实际能看到的、操作的只有这个文本框。

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

[ 本帖最后由 runningwater 于 2008-8-4 10:06 编辑 ]
发表于 2008-7-31 09:48:14 | 显示全部楼层
参考这个
http://www.autoitx.com/forum.php ... &extra=page%3D3
拖动上面的文字可移动窗口
 楼主| 发表于 2008-7-31 11:03:56 | 显示全部楼层
原帖由 pcbar 于 2008-7-31 09:48 发表
参考这个
http://www.autoitx.com/forum.php ... &extra=page%3D3
拖动上面的文字可移动窗口


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

[ 本帖最后由 runningwater 于 2008-7-31 11:13 编辑 ]
发表于 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[4] = $Input1 Then move()
EndFunc   ;==>mouseCHK
Func move()
        Local $PosDiff[2], $MousePos, $WinPos
        $MousePos = MouseGetPos()
        $WinPos = WinGetPos($Form1, "")
        $PosDiff[0] = $WinPos[0] - $MousePos[0]
        $PosDiff[1] = $WinPos[1] - $MousePos[1]
        While _IsPressed("01", DllOpen("user32.dll"))
                $MousePos = MouseGetPos()
                WinMove($Form1, "", $MousePos[0] + $PosDiff[0], $MousePos[1] + $PosDiff[1])
                Sleep(10)
        WEnd
EndFunc   ;==>move
 楼主| 发表于 2008-8-1 11:08:00 | 显示全部楼层

回复 4# pcbar 的帖子

太好了,谢谢~
 楼主| 发表于 2008-8-1 11:09:12 | 显示全部楼层
不允许修改了,请管理员帮忙移动到已解决,谢谢~
发表于 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
发表于 2010-3-1 15:02:31 | 显示全部楼层
1,用WinMove的方法,鼠标按下时截获鼠标坐标变量达到窗体随鼠标运动的目的。但对于移动有限制的窗体,
由于鼠标的自由移动,此代码可以突破对窗体的移动限制。
2,用$HTCAPTION的方法,代码更简洁些,而且保持了窗体的移动限制有效。但也有一个问题,就是发送$HTCAPTION之后,窗体的样式被重绘,已定制的样式失效。难怪都去做假标题栏。窗体伸缩就费劲了。
一句话,费这么多精力,总是不完美。
发表于 2010-3-1 15:12:53 | 显示全部楼层
过路看看
发表于 2011-8-16 00:38:24 | 显示全部楼层
pcbar兄的太复杂了。。。

这个更加简单。。。
sanhen 发表于 2008-8-2 18:25



    为什么不写全啊,搞不懂
发表于 2011-10-19 10:49:01 | 显示全部楼层
sanhen 的代码很强大,解决了好长时间没解决的问题!
发表于 2011-10-19 12:29:07 | 显示全部楼层
收藏,备用。。
发表于 2011-10-20 14:52:22 | 显示全部楼层
强帖留名,已备不时之需
发表于 2011-11-30 05:20:14 | 显示全部楼层
好东西。先收下了。
发表于 2016-5-4 13:41:31 | 显示全部楼层
pcbar兄的太复杂了。。。

这个更加简单。。。
sanhen 发表于 2008-8-2 18:25


方法相当好
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 01:03 , Processed in 0.079041 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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