The following sample code shows a Pickup and Drop operation after the user has selected an object and pressed mouse button 2 while holding down the Pickup and Drop augmentation key (Alt):
#define INCL_WINSTDDRAG #include <os2.h> PDRAGINFO pdinfo; /* Pointer to a DRAGINFO data structure */ HWND hwndSource; /* Handle of the Source window */ DRAGITEM ditem; /* DRAGITEM data structure */ PDRAGIMAGE pdimg; /* Pointer to DRAGIMAGE data structure */ HBITMAP hbm; /* Bit-map handle passed to DrgLazyDrag */ APIRET rc; /* Allocation memory return code */ case WM_PICKUP: /***********************************************************************/ /* Initialize the DRAGITEM data 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; /* Offset of the origin of the image */ ditem.cyOffset = 0; /* from the pointer hotspot */ ditem.fsControl = 0; /* Source item control flags */ ditem.fsSupportedOps = 0; /***********************************************************************/ /* Create the DRAGINFO data structures */ /***********************************************************************/ pdinfo=DrgAllocDraginfo(1); /* Return FALSE if initialization fails */ if(!pdinfo) return FALSE; /***********************************************************************/ /* Initialize the DRAGIMAGE data structure. */ /***********************************************************************/ rc=DosAllocMem((PPVOID)&pdimg, /* Allocate memory */ sizeof(DRAGIMAGE), (ULONG)PAG_COMMIT | PAG_READ | PAG_WRITE); 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 | /* Flags passed to DrgLazyDrag */ DRG_STRETCH; pdimg->cxOffset=0; /* Offset of the origin of image */ pdimg->cyOffset=0; /* from the pointer hotspot */ /***********************************************************************/ /* Set the DRAGITEM data structure. */ /***********************************************************************/ 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 */ NULL)) /* Reserved */ { DosFreeMem(pdimg); /* Free DRAGIMAGE if successful */ }