This function is used to send a message from one window to another when a direct manipulation is in progress. In this example, the function is used to inform the target that the operation is complete and successful.
#define INCL_WINSTDDRAG /* Direct Manipulation (Drag) Functions */ #include <os2.h> PDRAGINFO pdinfo; MPARAM mp1; TID tid; case DM_DROP: pdinfo = (PDRAGINFO) mp1; /***************************************************************/ /* If this is a copy operation, spawn a thread to do the copy */ /***************************************************************/ if (pdinfo->usOperation == DO_COPY) { DosCreateThread (&tid, CopyThread, pdinfo, FALSE, 4096); } break; void Copy Thread (PDRAGINFO pdinfo) { PDRAGITEM pditem; USHORT i; ULONG flResult; HAB hab; HMQ hmq; char szSource[CCH_MAXPATH]; char szTarget[CCH_MACPATH]; /***************************************************************/ /* DrgSendTransferMsg needs a message queue, so create one for */ /* this thread */ /***************************************************************/ hab = WinInitialize (0); hmq = WinCreateMsgQueue (hab, 0); /***************************************************************/ /* Try to copy each item that was dragged */ /***************************************************************/ for (i = 0; i < pdinfo->cditem; i++) { /*************************************************************/ /* Get a pointer to the DRAGITEM */ /*************************************************************/ pditem = DrgQueryDragitemPtr (pdinfo, i); /*************************************************************/ /* If we could query the source and target names, and the */ /* copy was successful, return success */ /*************************************************************/ if (DrgQueryStrName (pditem->hstrSourceName, sizeof (szSource), szSource) DrgQueryStrName (pditem->hstrTargetName, sizeof (szTarget), szTarget) !DosCopy (szSource, szTarget, 0)) { flResult = DMFL_TARGETSUCCESSFUL; } /*************************************************************/ /* Otherwise, return failure */ /*************************************************************/ else { flResult = DMFL_TARGETFAIL; } /*************************************************************/ /* Let the source know we're done with this item */ /*************************************************************/ DrgSendTransferMsg (pditem->hwndItem, DM_ENDCONVERSATION, (MPARAM) pditem->ulItemID, (MPARAM) flResult); } WinDestroyMsgQueue (hmq); WinTerminate (hab); }