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
- CodeExporter.cs
- DbConnectionOptions.cs
- SingleQueryOperator.cs
- CallbackValidatorAttribute.cs
- InputLanguage.cs
- MultipartIdentifier.cs
- peernodeimplementation.cs
- FixedSchema.cs
- FormViewAutoFormat.cs
- WorkflowInlining.cs
- Roles.cs
- VersionedStream.cs
- CriticalExceptions.cs
- SizeChangedInfo.cs
- StreamUpdate.cs
- RouteUrlExpressionBuilder.cs
- ColumnHeader.cs
- InputLangChangeRequestEvent.cs
- AsyncCompletedEventArgs.cs
- RelationshipManager.cs
- DiscoveryDocumentLinksPattern.cs
- ConfigXmlComment.cs
- InitializerFacet.cs
- RequestQueue.cs
- Pens.cs
- PropertyRecord.cs
- WebPartEditorApplyVerb.cs
- TransactionalPackage.cs
- Empty.cs
- WebConvert.cs
- SmtpReplyReaderFactory.cs
- NegotiationTokenAuthenticator.cs
- QilSortKey.cs
- TemplateControlCodeDomTreeGenerator.cs
- FacetDescriptionElement.cs
- WebServiceEnumData.cs
- LOSFormatter.cs
- namescope.cs
- AlternationConverter.cs
- DataSourceConverter.cs
- XmlQualifiedNameTest.cs
- AnnotationStore.cs
- MethodImplAttribute.cs
- CanExecuteRoutedEventArgs.cs
- FixedSOMTextRun.cs
- RemotingClientProxy.cs
- MessageSmuggler.cs
- DoubleAnimationUsingKeyFrames.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- DependencyPropertyAttribute.cs
- TableLayoutSettings.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- DragDeltaEventArgs.cs
- GenericWebPart.cs
- StringStorage.cs
- SqlDataSourceQueryConverter.cs
- Certificate.cs
- TextElement.cs
- BindingExpression.cs
- QilReplaceVisitor.cs
- SHA1Managed.cs
- SortExpressionBuilder.cs
- CustomErrorsSection.cs
- ResourceProviderFactory.cs
- CodeIdentifiers.cs
- WinFormsSecurity.cs
- HttpCachePolicyWrapper.cs
- LongMinMaxAggregationOperator.cs
- nulltextnavigator.cs
- MessageBox.cs
- AutomationProperties.cs
- RightsManagementLicense.cs
- SecurityContext.cs
- WebHeaderCollection.cs
- ClipboardData.cs
- RemoteWebConfigurationHost.cs
- wgx_render.cs
- VectorAnimation.cs
- SoapAttributes.cs
- ListViewInsertedEventArgs.cs
- FolderBrowserDialog.cs
- __FastResourceComparer.cs
- MessageSecurityProtocol.cs
- EntityDescriptor.cs
- SaveFileDialog.cs
- CapabilitiesState.cs
- FillBehavior.cs
- XmlSchemaParticle.cs
- SmiEventSink_DeferedProcessing.cs
- ClientSettingsSection.cs
- WebPartTransformer.cs
- DependencySource.cs
- XsdCachingReader.cs
- InternalConfigEventArgs.cs
- Transform3DGroup.cs
- FileRecordSequence.cs
- Thumb.cs
- CollectionViewGroupInternal.cs
- ColumnResult.cs
- PropertyEntry.cs