The Workplace Shell shredder object supports a rendering mechanism called DRM_DISCARD, not a standard PM mechanism. When dropping DRM_OBJECT or DRM_OS2FILE on a shredder, with pDragItemhstrContainerName or pDragItemhstrSourceName defined, the Workplace Shell will perform the action, and notify the source with a DM_ENDCONVERSATION message.

When dropping DRM_OS2FILE, with pDragItemhstrContainerName set to NULL, or dropping DRM_DISCARD on the shredder, the shredder sends a DM_DISCARDOBJECT message.

The following sample code shows an example of how to use wpDrop:

/*
 *  Rejects objects that are not file system objects from being dropped
 *  from being dropped on the Browse_O_matic.
 */

SOM_Scope MRESULT SOMLINK Browse_O_Maticwps_wpDrop(
                          Browse_O_Matic *somSelf,
                          HWND hwndCnr,
                          PDRAGINFO pdrgInfo,
                          PDRAGITEM pdrgItem)

{
  CHAR    pszBuffer[255];
  MRESULT mResult;

  /* Browse_O_MaticData *somThis = Browse_O_MaticGetData(somSelf); */
  Browse_O_MaticMethodDebug("Browse_O_Matic",
                            "Browse_O_Maticwps_wpDrop");

  mResult = MRFROM2SHORT(DOR_DROP, 0);

  /* Don't call the parent. Initialize mResult to allow */
  /* the drop to proceed.                               */
  if(DOR_NEVERDROP != SHORT1FROMMR(mResult) &&
                      DrgVerifyRMF(pdrgItem, "DRM_OS2FILE", NULL))

  {
    /* Get the path */
    DrgQueryStrName(pdrgItem->hstrContainerName,
                    sizeof(pszBuffer),
                    pszBuffer);

    /* Append the name of the object to the path */
    DrgQueryStrName(pdrgItem->hstrSourceName,
                    sizeof(pszBuffer) - strlen(pszBuffer),
                    &pszBuffer[strlen(pszBuffer)]);
    _wpViewObject(somSelf, NULLHANDLE, OPEN_DEFAULT, (ULONG)pszBuffer);
    mResult = MRFROM2SHORT(DOR_DROP, SHORT2FROMMR(mResult));
  }
  else
    mResult = MRFROMSHORT(DOR_NEVERDROP);

  return(mResult);
}


[Back] [Next]