Sign in to follow this  
Followers 0
furrycow

Drag window without a title bar

5 posts in this topic

Hey,

I'm creating a GUI that doesnt have a title bar, however i still wish for it to be able to be dragged around the screen, just by holding down mouse1 anywhere on the GUI...so far i have this code:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
AutoItSetOption("MouseCoordMode", 1)

$FRMTest = GUICreate("", 330, 156, 304, 194, BitOR($WS_MINIMIZEBOX, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS, $WS_EX_LAYERED))
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN,"_WindowDrag",$FRMTest)

While 1
    Sleep(1000)
WEnd

Func _WindowDrag()
    While $GUI_EVENT_PRIMARYDOWN
    $MousePos=MouseGetPos()
    WinMove ( "", "",$MousePos[0],$MousePos[1])
    Sleep(5)
    WEnd
EndFunc

However, the mouse always goes to (0,0) of the GUI when it comes to dragging, whereas i want it to drag from wherever the user places their mouse.

I was just looking for a few hints on what to do, as this code pretty much does all i want it to, just not where i want it to :P.

Thanks!


Instant Lockerz Invite - www.instantlockerzinvite.co.uk

Share this post


Link to post
Share on other sites



Func Drag($GUI)
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $GUI, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0)
EndFunc

Just place the name of your GUI parent variable in the function and place it in your loop.

For example: Drag($FRMTest) - place that in your loop.


My Projects: [topic="89413"]GoogleHack Search[/topic], [topic="67095"]Swiss File Knife GUI[/topic], [topic="69072"]Mouse Location Pointer[/topic], [topic="86040"]Standard Deviation Calculator[/topic]

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Func Drag($GUI)
    DllCall("user32.dll", "int", "SendMessage", "hWnd", $GUI, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0)
EndFunc

Just place the name of your GUI parent variable in the function and place it in your loop.

For example: Drag($FRMTest) - place that in your loop.

Works a treat, cheers buddy!

EDIT: I take that back, it does work, however, if i drag it, let go of mouse1, then open another window that i have minimized, the mouse arrow isn't able to move onto the windows taskbar....any thoughts?

Edited by furrycow

Instant Lockerz Invite - www.instantlockerzinvite.co.uk

Share this post


Link to post
Share on other sites

Hey,

I'm creating a GUI that doesnt have a title bar, however i still wish for it to be able to be dragged around the screen, just by holding down mouse1 anywhere on the GUI...so far i have this code:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)
AutoItSetOption("MouseCoordMode", 1)

$FRMTest = GUICreate("", 330, 156, 304, 194, BitOR($WS_MINIMIZEBOX, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS, $WS_EX_LAYERED))
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN,"_WindowDrag",$FRMTest)

While 1
    Sleep(1000)
WEnd

Func _WindowDrag()
    While $GUI_EVENT_PRIMARYDOWN
    $MousePos=MouseGetPos()
    WinMove ( "", "",$MousePos[0],$MousePos[1])
    Sleep(5)
    WEnd
EndFunc

However, the mouse always goes to (0,0) of the GUI when it comes to dragging, whereas i want it to drag from wherever the user places their mouse.

I was just looking for a few hints on what to do, as this code pretty much does all i want it to, just not where i want it to :unsure:.

Thanks!

You need to calculate an offset between mouse pos and window pos, and use that offset when moving the window:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt("GUIOnEventMode", 1)
AutoItSetOption("MouseCoordMode", 1)

HotKeySet("{ESC}", "_Quit")

$FRMTest = GUICreate("", 330, 156, 304, 194, BitOR($WS_MINIMIZEBOX, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS, $WS_EX_LAYERED))
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_WindowDrag", $FRMTest)

While 1
    Sleep(1000)
WEnd

Func _WindowDrag()
; Calculate offset
    $MouseOffset = WinGetPos($FRMTest)
    $MousePos = MouseGetPos()
    $MouseOffset[0] -= $MousePos[0]
    $MouseOffset[1] -= $MousePos[1]
    ConsoleWrite("Offset [0] = " & $MouseOffset[0] & "  [1] = " & $MouseOffset[1] & @LF)

; Loop while PRIMARYDOWN
    While _IsPressed("01")
        $MousePos = MouseGetPos()
        $MousePos[0] += $MouseOffset[0]
        $MousePos[1] += $MouseOffset[1]
        ConsoleWrite("Move [0] = " & $MousePos[0] & "  [1] = " & $MousePos[1] & @LF)
        WinMove($FRMTest, "", $MousePos[0], $MousePos[1])
        Sleep(20)
    WEnd
EndFunc  ;==>_WindowDrag

Func _Quit()
    Exit
EndFunc  ;==>_Quit

:P


Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

You need to calculate an offset between mouse pos and window pos, and use that offset when moving the window:

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

Opt("GUIOnEventMode", 1)
AutoItSetOption("MouseCoordMode", 1)

HotKeySet("{ESC}", "_Quit")

$FRMTest = GUICreate("", 330, 156, 304, 194, BitOR($WS_MINIMIZEBOX, $WS_DLGFRAME, $WS_POPUP, $WS_GROUP, $WS_CLIPSIBLINGS, $WS_EX_LAYERED))
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_WindowDrag", $FRMTest)

While 1
    Sleep(1000)
WEnd

Func _WindowDrag()
; Calculate offset
    $MouseOffset = WinGetPos($FRMTest)
    $MousePos = MouseGetPos()
    $MouseOffset[0] -= $MousePos[0]
    $MouseOffset[1] -= $MousePos[1]
    ConsoleWrite("Offset [0] = " & $MouseOffset[0] & "  [1] = " & $MouseOffset[1] & @LF)

; Loop while PRIMARYDOWN
    While _IsPressed("01")
        $MousePos = MouseGetPos()
        $MousePos[0] += $MouseOffset[0]
        $MousePos[1] += $MouseOffset[1]
        ConsoleWrite("Move [0] = " & $MousePos[0] & "  [1] = " & $MousePos[1] & @LF)
        WinMove($FRMTest, "", $MousePos[0], $MousePos[1])
        Sleep(20)
    WEnd
EndFunc ;==>_WindowDrag

Func _Quit()
    Exit
EndFunc ;==>_Quit

:P

Thats the ticket! Thank you very much Psalty!!

Instant Lockerz Invite - www.instantlockerzinvite.co.uk

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0