Drag any control with Ctrl+Click:
Code:
#NoEnv
WM_MOUSEMOVE := 0x200
WM_LBUTTONDOWN := 0x201
WM_LBUTTONUP := 0x202
; ------------------------------------------------------------------------------
Loop 5
Gui, Add, Picture, Icon%A_Index%, User32.dll
Gui, Add, Text, w200 h30 +0x201 +Border, Static Text Control
Gui, Add, Checkbox, , Checkbox
Gui, Add, Edit, w200 r3, Edit
Gui, Add, DDL, w200 r5, DDL||
Gui, Add, Button, , Move me!
Gui, Show, w400 , Ctrl+Click'N'Drag!
Gui, +LastFound
GuiID := WInExist()
OnMessage(WM_LBUTTONDOWN, "LButtonDown")
Return
; ------------------------------------------------------------------------------
GuiClose:
ExitApp
; ------------------------------------------------------------------------------
LButtonDown(W) {
Global
Static MK_LBUTTON := 0x1
Static MK_CONTROL := 0x8
If (W = (MK_CONTROL + MK_LBUTTON)) {
MouseGetPos, MX, MY, , CH, 2
If (CH) {
ControlGetPos, CX, CY, , , , ahk_id %CH%
DX := CX - MX, DY := CY - MY
OnMessage(WM_LBUTTONDOWN, "")
; WI : WINDOWINFO
NumPut(VarSetCapacity(WI, 68, 0), WI)
DllCall("GetWindowInfo", "UInt", GuiID, "Uint", &WI)
; CR : CLIENTRECT
VarSetCapacity(CR, 16, 0)
NumPut(NumGet(WI, 20), CR), NumPut(NumGet(WI, 24), CR, 4)
NumPut(NumGet(WI, 28), CR, 8), NumPut(NumGet(WI, 32), CR, 12)
DllCall("ClipCursor", "UInt", &CR)
WinGet, CList, ControlListHwnd, ahk_id %GuiID%
Loop, Parse, CList, `n
If (A_LoopField != CH)
Control, Disable, , , ahk_id %A_LoopField%
OnMessage(WM_MOUSEMOVE, "MouseMove")
OnMessage(WM_LBUTTONUP, "LButtonUp")
Return 1 ; Don't pass the Click!
}
}
}
; ------------------------------------------------------------------------------
LButtonUp() {
GLobal
OnMessage(WM_MOUSEMOVE, "")
OnMessage(WM_LBUTTONUP, "")
Loop, Parse, CList, `n
If (A_LoopField != CH)
Control, Enable, , , ahk_id %A_LoopField%
Winset, Redraw, , ahk_id %CH% ; %GuiID%
DllCall("ClipCursor", "UInt", 0)
OnMessage(WM_LBUTTONDOWN, "LButtonDown")
}
; ------------------------------------------------------------------------------
MouseMove() {
Global
Critical
MouseGetPos, MX, MY
ControlMove, , MX + DX, MY + DY, , , ahk_id %CH%
}
; ------------------------------------------------------------------------------