Difference between revisions of "Dragging windows"
From HashVB
(Added two drawbacks) |
m (You can still drag windowed controls by a windowless one.) |
||
Line 32: | Line 32: | ||
# You cant limit it to only moving in one direction | # You cant limit it to only moving in one direction | ||
− | If you want to use this to drag a control, just replace Form.hWnd with Control.hWnd. This will NOT work | + | If you want to use this to drag a control, just replace Form.hWnd with Control.hWnd. This will NOT work for dragging windowless controls like Labels or ImageBoxes but you can still drag a windowed control by them. |
===See also=== | ===See also=== | ||
* [http://www.earlsoft.co.uk/api/call.php?name=ReleaseCapture Earlsoft ReleaseCapture API page] | * [http://www.earlsoft.co.uk/api/call.php?name=ReleaseCapture Earlsoft ReleaseCapture API page] |
Revision as of 12:52, 24 April 2006
This article is based on Visual Basic 6. Find other Visual Basic 6 articles. |
So, you want to drag a window without using the real title bar?
I have seen lots of people using their own code in the mouse move event to do this, and I've even done it myself.
Until I found the following code:
Declare Function ReleaseCapture Lib "user32" () As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2
And when you want to do the dragging itself:
ReleaseCapture SendMessage Form.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&
This should go in the mousedown event of the control/object you want to drag the window by.
It has various advantages over home grown code:
- It's faster and rarely suffers from flickering.
- It's easier. Two lines once compared to a huge routine (or two?)
- It obeys the windows rules and settings on drawing windows while moving.
The only problems I have found with this are:
- It doesn't work when you use the right mouse button (although this may be just Windows XP)
- You cant limit it to only moving in one direction
If you want to use this to drag a control, just replace Form.hWnd with Control.hWnd. This will NOT work for dragging windowless controls like Labels or ImageBoxes but you can still drag a windowed control by them.