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
- LogoValidationException.cs
- FlowDocumentScrollViewer.cs
- HtmlSelect.cs
- SoapSchemaMember.cs
- FamilyTypeface.cs
- SearchForVirtualItemEventArgs.cs
- DataControlLinkButton.cs
- OdbcEnvironment.cs
- StringUtil.cs
- PersonalizationStateInfoCollection.cs
- WebHttpEndpoint.cs
- AddingNewEventArgs.cs
- UniformGrid.cs
- DataGridViewTextBoxEditingControl.cs
- XmlSequenceWriter.cs
- LogicalTreeHelper.cs
- CompiledXpathExpr.cs
- WebPartCatalogCloseVerb.cs
- HotCommands.cs
- NullExtension.cs
- BufferedStream.cs
- XsltQilFactory.cs
- CounterCreationDataCollection.cs
- SByte.cs
- CodeAttributeDeclaration.cs
- VariantWrapper.cs
- ManifestResourceInfo.cs
- TextBox.cs
- COM2PropertyBuilderUITypeEditor.cs
- StorageMappingItemLoader.cs
- MeasurementDCInfo.cs
- WebReferenceCollection.cs
- HttpClientCertificate.cs
- RegexRunner.cs
- ListView.cs
- XmlExpressionDumper.cs
- ColorAnimationUsingKeyFrames.cs
- CollectionViewSource.cs
- CultureTableRecord.cs
- PenLineCapValidation.cs
- Adorner.cs
- TextTreeRootTextBlock.cs
- DBConnection.cs
- _NtlmClient.cs
- CustomAssemblyResolver.cs
- DispatchChannelSink.cs
- InternalControlCollection.cs
- TreeNodeCollection.cs
- PriorityQueue.cs
- RuntimeComponentFilter.cs
- SolidBrush.cs
- AuthorizationRule.cs
- PageCatalogPart.cs
- FormsAuthenticationTicket.cs
- OleDbParameterCollection.cs
- ThreadAbortException.cs
- SqlProcedureAttribute.cs
- CodeDelegateInvokeExpression.cs
- CacheSection.cs
- ColorDialog.cs
- JournalEntryStack.cs
- ExtenderControl.cs
- WebPartsPersonalization.cs
- FocusChangedEventArgs.cs
- NullRuntimeConfig.cs
- FilterException.cs
- EndPoint.cs
- FlowPosition.cs
- WebBrowsableAttribute.cs
- DeviceSpecificDialogCachedState.cs
- BaseResourcesBuildProvider.cs
- formatter.cs
- SendMailErrorEventArgs.cs
- ConfigXmlSignificantWhitespace.cs
- PrinterResolution.cs
- QueryReaderSettings.cs
- ByteRangeDownloader.cs
- AtomPub10ServiceDocumentFormatter.cs
- DataGridViewAutoSizeModeEventArgs.cs
- InfoCardAsymmetricCrypto.cs
- BitmapFrameEncode.cs
- ComplexBindingPropertiesAttribute.cs
- PropertyGrid.cs
- HeaderedItemsControl.cs
- DesigntimeLicenseContextSerializer.cs
- CannotUnloadAppDomainException.cs
- MatrixTransform.cs
- WindowsFormsHelpers.cs
- TimeSpanSecondsConverter.cs
- ModelServiceImpl.cs
- columnmapfactory.cs
- OleDbRowUpdatedEvent.cs
- Image.cs
- EntitySqlQueryCacheEntry.cs
- MatrixConverter.cs
- DesignerUtility.cs
- Label.cs
- XPathAncestorIterator.cs
- NamespaceCollection.cs
- RegexInterpreter.cs