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
- NavigatorInput.cs
- SmiConnection.cs
- WebConfigurationFileMap.cs
- PropertyGeneratedEventArgs.cs
- Page.cs
- GotoExpression.cs
- CssTextWriter.cs
- PinnedBufferMemoryStream.cs
- ISessionStateStore.cs
- GradientBrush.cs
- AssertSection.cs
- PreviewPageInfo.cs
- CodeGenerator.cs
- WebServicesDescriptionAttribute.cs
- DesignerProperties.cs
- CorrelationScope.cs
- PlainXmlDeserializer.cs
- ColorInterpolationModeValidation.cs
- FacetValues.cs
- WindowsRegion.cs
- GetFileNameResult.cs
- XmlObjectSerializerReadContext.cs
- EntityDataSourceWrapperCollection.cs
- ToolboxItemFilterAttribute.cs
- RemotingException.cs
- PropertyChangingEventArgs.cs
- ArrayConverter.cs
- TreeNodeStyleCollection.cs
- relpropertyhelper.cs
- versioninfo.cs
- TransformerConfigurationWizardBase.cs
- SettingsPropertyValue.cs
- ListView.cs
- BamlBinaryWriter.cs
- BitmapEffectInputData.cs
- OrderablePartitioner.cs
- _NegoState.cs
- COAUTHIDENTITY.cs
- MaxValueConverter.cs
- MediaTimeline.cs
- InfoCardTrace.cs
- InfiniteTimeSpanConverter.cs
- ParserStreamGeometryContext.cs
- ComponentManagerBroker.cs
- ConfigXmlReader.cs
- NativeMethods.cs
- BufferedStream.cs
- ScrollEventArgs.cs
- Border.cs
- UseManagedPresentationBindingElement.cs
- XmlDocumentViewSchema.cs
- RequestCachePolicy.cs
- SizeAnimationClockResource.cs
- TagElement.cs
- LogSwitch.cs
- ACL.cs
- PeerPresenceInfo.cs
- RichTextBox.cs
- ListViewPagedDataSource.cs
- TreeNodeStyleCollectionEditor.cs
- VScrollProperties.cs
- WorkflowApplicationTerminatedException.cs
- TdsParserHelperClasses.cs
- Floater.cs
- HwndAppCommandInputProvider.cs
- QilValidationVisitor.cs
- Utils.cs
- CodeConstructor.cs
- WindowsTab.cs
- XmlText.cs
- SqlBuilder.cs
- odbcmetadatacolumnnames.cs
- Oci.cs
- SelectedDatesCollection.cs
- Parser.cs
- ScrollChrome.cs
- ProxyGenerator.cs
- XPathSelectionIterator.cs
- AddInController.cs
- AnnotationComponentManager.cs
- NetworkInterface.cs
- WindowsStatusBar.cs
- ActiveDocumentEvent.cs
- ForAllOperator.cs
- FillRuleValidation.cs
- HttpCookieCollection.cs
- DateTimeStorage.cs
- StateDesigner.CommentLayoutGlyph.cs
- ParallelEnumerableWrapper.cs
- PerformanceCounterPermission.cs
- Console.cs
- XmlSchemaSequence.cs
- XmlSchemaException.cs
- DataGridCaption.cs
- VisualTreeUtils.cs
- LifetimeManager.cs
- ServiceDescriptionReflector.cs
- DialogWindow.cs
- BindableAttribute.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs