DrgSetDragitem
Appearance
This function sets the values in a DRAGITEM structure.
Syntax
DrgSetDragitem(pdinfo, pditem, cbBuffer, iItem)
Parameters
- pdinfo (PDRAGINFO) - input
- Pointer to the DRAGINFO structure in which to place the DRAGITEM.
- pditem (PDRAGITEM) - input
- Pointer to the DRAGITEM structure to place in DRAGINFO.
- cbBuffer (ULONG) - input
- Size of the DRAGITEM addressed by pditem.
- iItem (ULONG) - input
- Zero-based index of the DRAGITEM to be set.
Returns
- rc (BOOL) - returns
- Success indicator.
- TRUE - Successful completion.
- FALSE - Error occurred.
Remarks
This function is used to initialize the DRAGINFO structure before calling DrgDrag. This function is used only by the source of the drag, not by the target.
Example Code
This example shows a direct manipulation operation between two windows. The actual operation, copying the CONFIG.SYS file to C:\OS2\CONFIG.SYS, is visually represented by a drag and drop of an icon.
#define INCL_GPIBITMAPS /* GPI Bit Map Functions */ #define INCL_WINSTDDRAG /* Direct Manipulation (Drag) Functions */ #define INCL_DOSFILEMGR /* File Management Functions */ #define INCL_WININPUT /* Window Input Functions */ #include <os2.h> #include <string.h> #define ID_WINDOW 255 #define ID_ITEM 256 #define ID_BITMAP 257 /* .rc file: "bitmap 257 drgimage.bmp" */ HPS hps; /* Presentation space handle */ BOOL flResult; HAB hab; PDRAGINFO pdinfo; DRAGITEM ditem; DRAGIMAGE dimg; PDRAGITEM pditem; HBITMAP hbm; /* Bit-map handle */ HPOINTER hptr; /* Pointer bit-map handle */ HWND hwndDrop; HWND hwnd; MPARAM mp1; char szBuffer[32]; /* Buffer where intersection string */ /* is returned */ char szSource[32]; char szTarget[32]; /*****************************************************************/ /* Inside ClientWindowProc of Source Window */ /*****************************************************************/ case WM_BEGINDRAG: /*****************************************************************/ /* Initialize the DRAGITEM structure */ /*****************************************************************/ ditem.hwndItem = hwnd; /* Conversation partner */ ditem.ulItemID = ID_ITEM; /* Identifies item being dragged */ 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; ditem.cyOffset = 0; ditem.fsControl = 0; ditem.fsSupportedOps = 0; /*****************************************************************/ /* Create the DRAGINFO structure */ /*****************************************************************/ pdinfo = DrgAllocDraginfo(1); /*****************************************************************/ /* Initialize the DRAGIMAGE structure */ /*****************************************************************/ dimg.cb = sizeof(DRAGIMAGE); /* Size control block */ dimg.cptl = 0; dimg.hImage = hbm; /* Image handle passed to */ /* DrgDrag */ dimg.sizlStretch.cx = 20L; /* Size to stretch ico or */ dimg.sizlStretch.cy = 20L; /* bmp to */ dimg.fl = DRG_BITMAP | DRG_STRETCH; /* Stretch to size specified */ dimg.cxOffset = 0; /* Offset of the origin of */ dimg.cyOffset = 0; /* the image from the pointer */ /* hotspot */ flResult= DrgSetDragitem(pdinfo, &ditem, (ULONG)sizeof(ditem), 0); /*****************************************************************/ /* Perform the drag operation: */ /*****************************************************************/ hwndDrop = DrgDrag(hwnd, /* Source of the drag */ pdinfo, /* Pointer to DRAGINFO structure*/ (PDRAGIMAGE)&dimg, /* Drag image */ 1, /* Size of the pdimg array */ VK_ENGDRAG, /* Release of drag button */ /* terminates the drag */ NULL); /* Reserved */ break; /*****************************************************************/ /* Inside ClientWindowProc of Target Window */ /*****************************************************************/ case DM_DRAGOVER: pdinfo = MPFROMP(mp1); pditem = DrgQueryDragitemPtr(pdinfo,0); flResult = DrgVerifyTrueType(pditem,"DRF_TEXT"); if(!flResult) /**************************************************************/ /* Inform the application that you will accept the drop */ /**************************************************************/ return(MRFROM2SHORT(DOR_DROP,DO_COPY)); case DM_DROP: pdinfo = MPFROMP(mp1); pditem = DrgQueryDragitemPtr(pdinfo,0); /*****************************************************************/ /* Perform the operation represented by the direct manipulation */ /*****************************************************************/ DrgQueryStrName(pditem->hstrSourceName,sizeof(szSource),szSource); DrgQueryStrName(pditem->hstrTargetName,sizeof(szTarget),szTarget); flResult = DosCopy(szSource,szTarget,0L); /*****************************************************************/ /* If operation is successful, return DMFL_TARGETSUCCESSFUL */ /*****************************************************************/ if(!flResult) { DrgSendTransferMsg(pditem->hwndItem, DM_ENDCONVERSATION, MPFROMLONG(pditem->ulItemID), MPFROMLONG(DMFL_TARGETSUCCESSFUL)); } /*****************************************************************/ /* Otherwise, return DMFL_TARGETFAIL */ /*****************************************************************/ else { DrgSendTransferMsg(pditem->hwndItem, DM_ENDCONVERSATION, MPFROMLONG(pditem->ulItemID), MPFROMLONG(DMFL_TARGETFAIL)); }