Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / DropTarget.cs / 1305376 / DropTarget.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms
{
using System;
using System.Diagnostics;
using System.Security.Permissions;
using System.Security;
using System.ComponentModel;
using IComDataObject = System.Runtime.InteropServices.ComTypes.IDataObject;
///
///
internal class DropTarget : UnsafeNativeMethods.IOleDropTarget {
private IDataObject lastDataObject = null;
private DragDropEffects lastEffect = DragDropEffects.None;
private IDropTarget owner;
public DropTarget(IDropTarget owner) {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "DropTarget created");
this.owner = owner;
}
#if DEBUG
~DropTarget() {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "DropTarget destroyed");
}
#endif
private DragEventArgs CreateDragEventArgs(object pDataObj, int grfKeyState, NativeMethods.POINTL pt, int pdwEffect) {
IDataObject data = null;
if (pDataObj == null) {
data = lastDataObject;
}
else {
if (pDataObj is IDataObject) {
data = (IDataObject)pDataObj;
}
else if (pDataObj is IComDataObject) {
data = new DataObject(pDataObj);
}
else {
return null; // Unknown data object interface; we can't work with this so return null
}
}
DragEventArgs drgevent = new DragEventArgs(data, grfKeyState, pt.x, pt.y, (DragDropEffects)pdwEffect, lastEffect);
lastDataObject = data;
return drgevent;
}
int UnsafeNativeMethods.IOleDropTarget.OleDragEnter(object pDataObj, int grfKeyState,
long pt,
ref int pdwEffect) {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "OleDragEnter recieved");
NativeMethods.POINTL ptl = new NativeMethods.POINTL();
ptl.x = GetX(pt);
ptl.y = GetY(pt);
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "\t" + (ptl.x) + "," + (ptl.y));
Debug.Assert(pDataObj != null, "OleDragEnter didn't give us a valid data object.");
DragEventArgs drgevent = CreateDragEventArgs(pDataObj, grfKeyState, ptl, pdwEffect);
if (drgevent != null) {
owner.OnDragEnter(drgevent);
pdwEffect = (int)drgevent.Effect;
lastEffect = drgevent.Effect;
}
else {
pdwEffect = (int)DragDropEffects.None;
}
return NativeMethods.S_OK;
}
int UnsafeNativeMethods.IOleDropTarget.OleDragOver(int grfKeyState, long pt, ref int pdwEffect) {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "OleDragOver recieved");
NativeMethods.POINTL ptl = new NativeMethods.POINTL();
ptl.x = GetX(pt);
ptl.y = GetY(pt);
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "\t" + (ptl.x) + "," + (ptl.y));
DragEventArgs drgevent = CreateDragEventArgs(null, grfKeyState, ptl, pdwEffect);
owner.OnDragOver(drgevent);
pdwEffect = (int)drgevent.Effect;
lastEffect = drgevent.Effect;
return NativeMethods.S_OK;
}
int UnsafeNativeMethods.IOleDropTarget.OleDragLeave() {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "OleDragLeave recieved");
owner.OnDragLeave(EventArgs.Empty);
return NativeMethods.S_OK;
}
int UnsafeNativeMethods.IOleDropTarget.OleDrop(object pDataObj, int grfKeyState, long pt, ref int pdwEffect) {
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "OleDrop recieved");
NativeMethods.POINTL ptl = new NativeMethods.POINTL();
ptl.x = GetX(pt);
ptl.y = GetY(pt);
Debug.WriteLineIf(CompModSwitches.DragDrop.TraceInfo, "\t" + (ptl.x) + "," + (ptl.y));
DragEventArgs drgevent = CreateDragEventArgs(pDataObj, grfKeyState, ptl, pdwEffect);
if (drgevent != null) {
owner.OnDragDrop(drgevent);
pdwEffect = (int)drgevent.Effect;
}
else {
pdwEffect = (int)DragDropEffects.None;
}
lastEffect = DragDropEffects.None;
lastDataObject = null;
return NativeMethods.S_OK;
}
private int GetX(long pt) {
return(int)(pt & 0xFFFFFFFF);
}
private int GetY(long pt) {
return(int)((pt >> 32) & 0xFFFFFFFF);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PackageProperties.cs
- HttpApplicationStateWrapper.cs
- SynchronousChannelMergeEnumerator.cs
- ProxyGenerator.cs
- TransformedBitmap.cs
- AvTraceFormat.cs
- IChannel.cs
- UTF8Encoding.cs
- FigureParaClient.cs
- ModelVisual3D.cs
- BuildResult.cs
- UITypeEditor.cs
- DocumentsTrace.cs
- SegmentInfo.cs
- DesignerWithHeader.cs
- OdbcConnection.cs
- CultureInfo.cs
- RuntimeConfigurationRecord.cs
- HttpBindingExtension.cs
- formatter.cs
- DesignerHost.cs
- BufferedWebEventProvider.cs
- HitTestFilterBehavior.cs
- SystemFonts.cs
- FatalException.cs
- NavigationWindowAutomationPeer.cs
- ResourceType.cs
- PropertyItem.cs
- WorkflowQueuingService.cs
- AtomContentProperty.cs
- TokenBasedSetEnumerator.cs
- OdbcConnectionString.cs
- QuadraticBezierSegment.cs
- ToolbarAUtomationPeer.cs
- TdsEnums.cs
- HelpProvider.cs
- SystemMulticastIPAddressInformation.cs
- OdbcRowUpdatingEvent.cs
- GenericPrincipal.cs
- SystemIPInterfaceProperties.cs
- SequentialActivityDesigner.cs
- XmlNode.cs
- AppSettingsExpressionBuilder.cs
- CodeMethodReturnStatement.cs
- MessageSecurityTokenVersion.cs
- HtmlElementErrorEventArgs.cs
- ServiceModelConfigurationSectionCollection.cs
- DeferredSelectedIndexReference.cs
- AdjustableArrowCap.cs
- RegistryPermission.cs
- StringValueConverter.cs
- NamespaceList.cs
- ObjectListCommandCollection.cs
- DrawingVisual.cs
- GetTokenRequest.cs
- BitmapEffectDrawingContextState.cs
- SqlDataSourceDesigner.cs
- PathTooLongException.cs
- SoapEnvelopeProcessingElement.cs
- XmlWrappingReader.cs
- GridViewSelectEventArgs.cs
- ErrorHandler.cs
- BufferedMessageData.cs
- IntMinMaxAggregationOperator.cs
- Header.cs
- CharStorage.cs
- UserInitiatedRoutedEventPermission.cs
- RenderTargetBitmap.cs
- PrivateFontCollection.cs
- PointLightBase.cs
- PropertyOverridesDialog.cs
- SchemaNamespaceManager.cs
- DataControlFieldCell.cs
- UnmanagedBitmapWrapper.cs
- ValidationResult.cs
- ComplexTypeEmitter.cs
- CodeNamespaceImportCollection.cs
- TextServicesManager.cs
- ExceptionRoutedEventArgs.cs
- DesignBinding.cs
- ChangeConflicts.cs
- ObjectTag.cs
- HtmlFormWrapper.cs
- SmtpDateTime.cs
- XmlElement.cs
- WindowsTitleBar.cs
- DesignerProperties.cs
- SerializerDescriptor.cs
- AnnotationComponentManager.cs
- AxisAngleRotation3D.cs
- TimeSpanStorage.cs
- XmlAttributeAttribute.cs
- LongTypeConverter.cs
- XmlSchemaExternal.cs
- ServiceReference.cs
- DataGridHeaderBorder.cs
- SerialReceived.cs
- DrawingGroup.cs
- WarningException.cs
- UnSafeCharBuffer.cs