When an object is dragged over another object, the system invokes wpDragOver in the object being dragged over. This method receives a DRAGINFO structure, which contains pointers to DRAGITEM structures and other information. The potential target object examines this information to determine the validity of a Drop operation, and if the drop is not valid, changes the pointing device to indicate a "do not drop" situation. The following sample code shows an example of how to use wpDragOver:
/*
* Rejects objects that are not file system objects from being dropped
* on the Browse_O_matic.
*/
SOM_Scope MRESULT SOMLINK Browse_O_Maticwps_wpDragOver(
Browse_O_Matic *somSelf,
HWND hwndCnr,
PDRAGINFO pdrgInfo)
{
MRESULT mResult;
ULONG ulCount;
ULONG ulNumberOfObjects;
/* Browse_O_MaticData *somThis = Browse_O_MaticGetData(somSelf); */
Browse_O_MaticMethodDebug("Browse_O_Matic",
"Browse_O_Maticwps_wpDragOver");
/* Don't call the parent. Initialize mResult to allow */
/* the drag over to proceed */
mResult = MRFROM2SHORT(DOR_DROP, DO_MOVE);
/* Determine the number of objects dragged */
/* over the Browse-O-Matic */
ulNumberOfObjects = DrgQueryDragitemCount( pdrgInfo);
/* Check all the objects */
for (ulCount=0; ulCount < ulNumberOfObjects &&
SHORT1FROMMR(mResult) !=
DOR_NEVERDROP; ulCount++)
{
/* It must be a file system type object */
if(DrgVerifyRMF(DrgQueryDragitemPtr(pdrgInfo, ulCount),
"DRM_OS2FILE",
NULL))
mResult = MRFROM2SHORT(DOR_DROP, SHORT2FROMMR(mResult));
else
mResult = MRFROM2SHORT(DOR_NEVERDROP, SHORT2FROMMR(mResult));
}
return(mResult);
}