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
- XmlSignatureProperties.cs
- ThreadAbortException.cs
- DoubleCollectionValueSerializer.cs
- BoolExpression.cs
- IISMapPath.cs
- XmlSchemaChoice.cs
- TextDocumentView.cs
- WebSysDescriptionAttribute.cs
- Visual3DCollection.cs
- SessionViewState.cs
- AssemblyAttributesGoHere.cs
- XmlSchemaSimpleType.cs
- BinaryNode.cs
- ModuleBuilder.cs
- TerminatorSinks.cs
- ConfigXmlDocument.cs
- WebPartZoneDesigner.cs
- followingsibling.cs
- ValidationPropertyAttribute.cs
- WebBrowserPermission.cs
- AvTraceDetails.cs
- RenamedEventArgs.cs
- ItemsPresenter.cs
- SvcFileManager.cs
- ToolBar.cs
- WindowsIPAddress.cs
- SamlSubject.cs
- Image.cs
- BuildProvidersCompiler.cs
- TypeUtil.cs
- HttpContextServiceHost.cs
- Hashtable.cs
- SiteMapHierarchicalDataSourceView.cs
- RotateTransform.cs
- DocumentScope.cs
- HashSetEqualityComparer.cs
- DNS.cs
- CheckBoxField.cs
- TextRunCacheImp.cs
- WebPartManagerInternals.cs
- UserControlCodeDomTreeGenerator.cs
- ImageListImage.cs
- TokenBasedSet.cs
- X509ChainElement.cs
- AbstractDataSvcMapFileLoader.cs
- BaseTemplateBuildProvider.cs
- EmptyQuery.cs
- CorrelationQuery.cs
- HitTestResult.cs
- NavigationEventArgs.cs
- GroupQuery.cs
- InvariantComparer.cs
- CodeStatement.cs
- NavigatorInvalidBodyAccessException.cs
- SQLMoneyStorage.cs
- TemplateBindingExpressionConverter.cs
- RuntimeDelegateArgument.cs
- ProcessModelSection.cs
- ToolStrip.cs
- ActivityStatusChangeEventArgs.cs
- FakeModelPropertyImpl.cs
- UriScheme.cs
- PointF.cs
- DebuggerAttributes.cs
- DataMemberAttribute.cs
- InplaceBitmapMetadataWriter.cs
- SystemFonts.cs
- EditCommandColumn.cs
- DataGridViewButtonCell.cs
- SpeakInfo.cs
- IntegrationExceptionEventArgs.cs
- SynchronizedInputHelper.cs
- EarlyBoundInfo.cs
- PersonalizableAttribute.cs
- UserValidatedEventArgs.cs
- XmlTypeMapping.cs
- prefixendpointaddressmessagefilter.cs
- SparseMemoryStream.cs
- BrushValueSerializer.cs
- UnmanagedMarshal.cs
- RemotingService.cs
- PrefixHandle.cs
- StorageBasedPackageProperties.cs
- CommonDialog.cs
- IdentitySection.cs
- Wow64ConfigurationLoader.cs
- HttpCapabilitiesBase.cs
- SchemaImporterExtensionElementCollection.cs
- SHA256.cs
- SimpleBitVector32.cs
- SqlTrackingQuery.cs
- ReachPrintTicketSerializer.cs
- NetNamedPipeSecurityElement.cs
- PeekCompletedEventArgs.cs
- BooleanAnimationBase.cs
- DictionaryTraceRecord.cs
- PolicyVersion.cs
- LogLogRecordHeader.cs
- BindableAttribute.cs
- SystemMulticastIPAddressInformation.cs