public unsafe HRESULT GetDragDropEffect(BOOL fDrag, User32.MK grfKeyState, Ole32.DROPEFFECT *pdwEffect) { if (pdwEffect is null) { return(HRESULT.E_POINTER); } *pdwEffect = Ole32.DROPEFFECT.NONE; return(HRESULT.S_OK); }
public unsafe HRESULT GetDragDropEffect(BOOL fDrag, User32.MK grfKeyState, Ole32.DROPEFFECT *pdwEffect) { if (pdwEffect is null) { return(HRESULT.E_POINTER); } Debug.WriteLineIf(RichTextDbg.TraceVerbose, "IRichEditOleCallback::GetDragDropEffect"); if (owner.AllowDrop || owner.EnableAutoDragDrop) { if (fDrag.IsTrue() && grfKeyState == (User32.MK) 0) { // This is the very first call we receive in a Drag-Drop operation, // so we will let the control know what we support. // Note that we haven't gotten any data yet, so we will let QueryAcceptData // do the OnDragEnter. Note too, that grfKeyState does not yet reflect the // current keystate if (owner.EnableAutoDragDrop) { lastEffect = (DragDropEffects.All | DragDropEffects.None); } else { lastEffect = DragDropEffects.None; } } else { // We are either dragging over or dropping // The below is the complete reverse of what the docs on MSDN suggest, // but if we follow the docs, we would be firing OnDragDrop all the // time instead of OnDragOver (see // drag - fDrag = false, grfKeyState != 0 // drop - fDrag = false, grfKeyState = 0 // We only care about the drag. // // When we drop, lastEffect will have the right state if (fDrag.IsFalse() && lastDataObject is not null && grfKeyState != (User32.MK) 0) { DragEventArgs e = new DragEventArgs(lastDataObject, (int)grfKeyState, Control.MousePosition.X, Control.MousePosition.Y, DragDropEffects.All, lastEffect); // Now tell which of the allowable effects we want to use, but only if we are not already none if (lastEffect != DragDropEffects.None) { e.Effect = ((grfKeyState & User32.MK.CONTROL) == User32.MK.CONTROL) ? DragDropEffects.Copy : DragDropEffects.Move; } owner.OnDragOver(e); lastEffect = e.Effect; } } *pdwEffect = (Ole32.DROPEFFECT)lastEffect; } else { *pdwEffect = Ole32.DROPEFFECT.NONE; } return(HRESULT.S_OK); }