Jump to content

DrgSetDragitem

From EDM2

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));
   }

Related Functions