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
- SizeAnimation.cs
- DeflateEmulationStream.cs
- AttachedAnnotationChangedEventArgs.cs
- CompressStream.cs
- CustomErrorsSectionWrapper.cs
- ServiceXNameTypeConverter.cs
- TransformerConfigurationWizardBase.cs
- ToolboxDataAttribute.cs
- SByteStorage.cs
- SafeCancelMibChangeNotify.cs
- Region.cs
- ActiveXHost.cs
- ModuleBuilderData.cs
- DataKeyArray.cs
- QueryContinueDragEvent.cs
- EventProviderWriter.cs
- ColorConvertedBitmap.cs
- basecomparevalidator.cs
- XsltContext.cs
- XmlRawWriter.cs
- PipelineModuleStepContainer.cs
- EventOpcode.cs
- GenericWebPart.cs
- MessageContractAttribute.cs
- DbConnectionPoolCounters.cs
- ListViewTableCell.cs
- UpdateTranslator.cs
- DataGridViewComboBoxColumn.cs
- XmlEncoding.cs
- DataGridHeaderBorder.cs
- ValidatingReaderNodeData.cs
- CompositionDesigner.cs
- ListViewItemEventArgs.cs
- BaseParser.cs
- MemberAccessException.cs
- WebBrowsableAttribute.cs
- SessionStateModule.cs
- XmlNamedNodeMap.cs
- GridViewColumnCollectionChangedEventArgs.cs
- HashCodeCombiner.cs
- HttpSocketManager.cs
- OperationFormatUse.cs
- MetafileHeaderWmf.cs
- WindowsTitleBar.cs
- LinqDataSource.cs
- ResourcesChangeInfo.cs
- X509Utils.cs
- SelectionRange.cs
- Vector3DKeyFrameCollection.cs
- ConditionalExpression.cs
- ISessionStateStore.cs
- DbDataAdapter.cs
- IResourceProvider.cs
- ByteAnimationUsingKeyFrames.cs
- AudioBase.cs
- Hex.cs
- DesignerCommandSet.cs
- WebPartConnectionsConnectVerb.cs
- UnmanagedMemoryStream.cs
- localization.cs
- SimpleBitVector32.cs
- EventHandlingScope.cs
- ListBoxChrome.cs
- EntityType.cs
- SchemaObjectWriter.cs
- DocumentPage.cs
- FormViewRow.cs
- Flattener.cs
- CollectionEditor.cs
- TreeViewEvent.cs
- FrameworkTemplate.cs
- AnnotationResource.cs
- FreezableCollection.cs
- DecimalConstantAttribute.cs
- CancellationTokenSource.cs
- SmtpReplyReader.cs
- EndpointInstanceProvider.cs
- ToolBar.cs
- Models.cs
- SessionStateUtil.cs
- ObjectSet.cs
- TimeEnumHelper.cs
- DataGridViewCheckBoxColumn.cs
- TypeResolver.cs
- WinFormsSpinner.cs
- HttpConfigurationSystem.cs
- RegexGroupCollection.cs
- DrawingVisualDrawingContext.cs
- PerfCounters.cs
- VisualBrush.cs
- OracleCommandSet.cs
- RowBinding.cs
- RepeaterItemCollection.cs
- RegexGroup.cs
- MsdtcWrapper.cs
- ServiceElementCollection.cs
- UrlPath.cs
- ProcessInfo.cs
- CodeAccessSecurityEngine.cs
- PropertyPathWorker.cs