return COM.S_OK;
return COM.S_FALSE;
private int DragEnter(int pDataObject, int grfKeyState, int pt_x, int pt_y, int pdwEffect) {	selectedDataType = null;	selectedOperation = DND.DROP_NONE;	if (iDataObject != null) iDataObject.Release();	iDataObject = null;		DNDEvent event = new DNDEvent();	if (!setEventData(event, pDataObject, grfKeyState, pt_x, pt_y, pdwEffect)) {		OS.MoveMemory(pdwEffect, new int[] {COM.DROPEFFECT_NONE}, 4);		return COM.S_OK;	}		// Remember the iDataObject because it is not passed into the DragOver callback	iDataObject = new IDataObject(pDataObject);	iDataObject.AddRef();		int allowedOperations = event.operations;	TransferData[] allowedDataTypes = new TransferData[event.dataTypes.length];	System.arraycopy(event.dataTypes, 0, allowedDataTypes, 0, allowedDataTypes.length);	notifyListeners(DND.DragEnter, event);	if (event.detail == DND.DROP_DEFAULT) {		event.detail = (allowedOperations & DND.DROP_MOVE) != 0 ? DND.DROP_MOVE : DND.DROP_NONE;	}		selectedDataType = null;	for (int i = 0; i < allowedDataTypes.length; i++) {		if (TransferData.sameType(allowedDataTypes[i], event.dataType)){			selectedDataType = allowedDataTypes[i];			break;		}	}		selectedOperation = DND.DROP_NONE;	if (selectedDataType != null && ((allowedOperations & event.detail) != 0)) {		selectedOperation = event.detail;	}	effect.show(event.feedback, event.x, event.y);		OS.MoveMemory(pdwEffect, new int[] {opToOs(selectedOperation)}, 4);	return COM.S_OK;}