|
Beginning the Drag Operation
The following function is intended to be called in response to a mouse
button-down message, such as WM_LBUTTONDOWN. The function determines whether the user has clicked within the bounding
rectangle of the image. If the user has clicked, the function captures the mouse
input, erases the image from the client area, and calculates the position for
the hot spot within the image. The function sets the hot spot to coincide with
the hot spot of the mouse cursor. Then the function begins the drag operation by
calling ImageList_BeginDrag.
// StartDragging - begins dragging a bitmap.
// Returns TRUE if successful or FALSE otherwise.
// hwnd - handle of the window in which the bitmap is dragged
// ptCur - coordinates of the cursor
// himl - handle of the image list
//
// Global variables
// g_rcImage - bounding rectangle of the image to drag
// g_nImage - index of the image
// g_ptHotSpot - location of the image's hot spot
// g_cxBorder and g_cyBorder - width and height of border
// g_cyCaption and g_cyMenu - height of title bar and menu bar
extern RECT g_rcImage;
extern int g_nImage;
extern POINT g_ptHotSpot;
BOOL StartDragging(HWND hwnd, POINT ptCur, HIMAGELIST himl)
{
// Return if the cursor is not in the bounding rectangle of
// the image.
if (!PtInRect(&g_rcImage, ptCur))
return FALSE;
// Capture the mouse input.
SetCapture(hwnd);
// Erase the image from the client area.
InvalidateRect(hwnd, &g_rcImage, TRUE);
UpdateWindow(hwnd);
// Calculate the location of the hot spot, and save it.
g_ptHotSpot.x = ptCur.x - g_rcImage.left;
g_ptHotSpot.y = ptCur.y - g_rcImage.top;
// Begin the drag operation.
if (!ImageList_BeginDrag(himl, g_nImage,
g_ptHotSpot.x, g_ptHotSpot.y))
return FALSE;
// Set the initial location of the image, and make it visible.
// Because the ImageList_DragEnter function expects coordinates to
// be relative to the upper-left corner of the given window, the
// width of the border, title bar, and menu bar need to be taken
// into account.
ImageList_DragEnter(hwnd, ptCur.x + g_cxBorder,
ptCur.y + g_cyBorder + g_cyCaption + g_cyMenu);
g_fDragging = TRUE;
return TRUE;
}
Related Links
Software for Delphi and C++ Builder developers
Software for Visual Studio .NET developers
Software for Visual Basic 6 developers
Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder
More Online Helps
Win32 Multimedia Programmer's Reference (mmedia.hlp)
OLE Programmer's Reference (ole.hlp)
Microsoft Windows Pen API Programmer's Reference (penapi.hlp)
Microsoft Windows Sockets 2 Reference (sock2.hlp)
Microsoft Windows Telephony API (TAPI) Programmer's Reference (tapi.hlp)
Unix Manual Pages
|