Jump to content

Recommended Posts

Posted

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
Posted

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]

Posted (edited)

  Ealric said:

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
Posted

  furrycow said:

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
Posted

  PsaltyDS said:

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

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...