This example shows the proper sequence for initiating a lazy drag operation after the user has selected an object and pressed the direct manipulation button while holding down the lazy drag augmentation key (ALT). The window receives a WM_PICKUP message indicating that a lazy drag operation is to begin.
#define INCL_WINSTDDRAG
#include <os2.h>
PDRAGINFO pdinfo; /* Pointer to a DRAGINFO structure */
HWND hwndSource; /* Handle of the Source window */
DRAGITEM ditem; /* DRAGITEM structure */
PDRAGIMAGE pdimg; /* Pointer to DRAGIMAGE structure */
HBITMAP hbm; /* Bit-map handle passed to DrgLazyDrag */
.
.
.
case WM_PICKUP:
/*******************************************************************/
/* Initialize the DRAGITEM structure */
/*******************************************************************/
ditem.hwndItem=hwndSource; /* Handle of the source window */
ditem.ulItemID=ID_ITEM; /* App defined id of item */
ditem.hstrType=DrgAddStrHandle("DRT_TEXT"); /* Text item */
ditem.hstrRMF=DrgAddStrHandle("<DRM_OS2FILE,DRF_TEXT>");
ditem.hstrContainerName=DrgAddStrHandle("C:\\");
ditem.hstrSourceName=DrgAddStrHandle("C:\\CONFIG.SYS");
ditem.hstrTargetName=DrgAddStrHandle("C:\\OS2\\CONFIG.SYS");
ditem.cxOffset=0; /* X-offset of the origin of the image from the */
/* pointer hotspot */
ditem.cyOffset=0; /* Y-offset of the origin of the image from the */
/* pointer hotspot */
ditem.fsControl=0; /* Source item control flags */
ditem.fsSupportedOps=0;
/*******************************************************************/
/* Create the DRAGINFO structure */
/*******************************************************************/
pdinfo=DrgAllocDraginfo(1);
if(!pdinfo) return FALSE; /* Return FALSE if initialization fails */
/*******************************************************************/
/* Initialize the DRAGIMAGE structure */
/*******************************************************************/
pdimg=AllocMem(sizeof(DRAGIMAGE));
pdimg->cb=sizeof(DRAGIMAGE); /* Size of the dragimage structure */
pdimg->cptl=0; /* Image is not a polygon */
pdimg->hImage=hbm; /* Handle of image to display */
pdimg->sizlStretch.cx=20L /* Size to stretch icon or bit map */
pdimg->fl=DRG_BITMAP|DRG_STRETCH; /* Flags passed to DrgLazyDrag */
pdimg->cxOffset=0; /* Offset of the origin of image */
pdimg->cyOffset=0; /* from the pointer hotspot */
/*******************************************************************/
/* Set the DRAGITEM */
/*******************************************************************/
DrgSetDragitem(pdinfo, &ditem, (ULONG)sizeof(ditem, 0);
/*******************************************************************/
/* Begin the Lazy Drag operation */
/*******************************************************************/
if (DrgLazyDrag (hwndSource, /* Source of the drag */
pdinfo, /* Pointer to the DRAGINFO */
pdimg, /* DRAGIMAGE array */
1, /* Size of the DRAGIMAGE array */
NULL)) { /* Reserved */
FreeMem (pdimg); /* Free DRAGIMAGE if successful */
}