Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2PictureConverter.cs / 1 / COM2PictureConverter.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms.ComponentModel.Com2Interop {
using System.Runtime.Serialization.Formatters;
using System.ComponentModel;
using System.Diagnostics;
using System;
using System.Drawing;
using System.Collections;
using Microsoft.Win32;
///
///
/// This class maps an IPicture to a System.Drawing.Image.
///
internal class Com2PictureConverter : Com2DataTypeToManagedDataTypeConverter {
object lastManaged;
IntPtr lastNativeHandle;
WeakReference pictureRef;
IntPtr lastPalette = IntPtr.Zero;
Type pictureType = typeof(Bitmap);
public Com2PictureConverter(Com2PropertyDescriptor pd) {
if (pd.DISPID == NativeMethods.ActiveX.DISPID_MOUSEICON || pd.Name.IndexOf("Icon") != -1) {
pictureType = typeof(Icon);
}
}
///
///
/// Returns the managed type that this editor maps the property type to.
///
public override Type ManagedType {
get {
return pictureType;
}
}
///
///
/// Converts the native value into a managed value
///
public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) {
if (nativeValue == null) {
return null;
}
Debug.Assert(nativeValue is UnsafeNativeMethods.IPicture, "nativevalue is not IPicture");
UnsafeNativeMethods.IPicture nativePicture = (UnsafeNativeMethods.IPicture)nativeValue;
IntPtr handle = nativePicture.GetHandle();
if (lastManaged != null && handle == lastNativeHandle) {
return lastManaged;
}
lastNativeHandle = handle;
//lastPalette = nativePicture.GetHPal();
if (handle != IntPtr.Zero) {
switch (nativePicture.GetPictureType()) {
case NativeMethods.Ole.PICTYPE_ICON:
pictureType = typeof(Icon);
lastManaged = Icon.FromHandle(handle);
break;
case NativeMethods.Ole.PICTYPE_BITMAP:
pictureType = typeof(Bitmap);
lastManaged = Image.FromHbitmap(handle);
break;
default:
Debug.Fail("Unknown picture type");
break;
}
pictureRef = new WeakReference(nativePicture);
}
else {
lastManaged = null;
pictureRef = null;
}
return lastManaged;
}
///
///
/// Converts the managed value into a native value
///
public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) {
// don't cancel the set
cancelSet = false;
if (lastManaged != null && lastManaged.Equals(managedValue) && pictureRef != null && pictureRef.IsAlive) {
return pictureRef.Target;
}
// we have to build an IPicture
lastManaged = managedValue;
if (managedValue != null) {
Guid g = typeof(UnsafeNativeMethods.IPicture).GUID;
NativeMethods.PICTDESC pictdesc = null;
bool own = false;
if (lastManaged is Icon) {
pictdesc = NativeMethods.PICTDESC.CreateIconPICTDESC(((Icon)lastManaged).Handle);
}
else if (lastManaged is Bitmap) {
pictdesc = NativeMethods.PICTDESC.CreateBitmapPICTDESC(((Bitmap)lastManaged).GetHbitmap(), lastPalette);
own = true;
}
else {
Debug.Fail("Unknown Image type: " + managedValue.GetType().Name);
}
UnsafeNativeMethods.IPicture pict = UnsafeNativeMethods.OleCreatePictureIndirect(pictdesc, ref g, own);
lastNativeHandle = pict.GetHandle();
pictureRef = new WeakReference(pict);
return pict;
}
else {
lastManaged = null;
lastNativeHandle = lastPalette = IntPtr.Zero;
pictureRef = null;
return null;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms.ComponentModel.Com2Interop {
using System.Runtime.Serialization.Formatters;
using System.ComponentModel;
using System.Diagnostics;
using System;
using System.Drawing;
using System.Collections;
using Microsoft.Win32;
///
///
/// This class maps an IPicture to a System.Drawing.Image.
///
internal class Com2PictureConverter : Com2DataTypeToManagedDataTypeConverter {
object lastManaged;
IntPtr lastNativeHandle;
WeakReference pictureRef;
IntPtr lastPalette = IntPtr.Zero;
Type pictureType = typeof(Bitmap);
public Com2PictureConverter(Com2PropertyDescriptor pd) {
if (pd.DISPID == NativeMethods.ActiveX.DISPID_MOUSEICON || pd.Name.IndexOf("Icon") != -1) {
pictureType = typeof(Icon);
}
}
///
///
/// Returns the managed type that this editor maps the property type to.
///
public override Type ManagedType {
get {
return pictureType;
}
}
///
///
/// Converts the native value into a managed value
///
public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) {
if (nativeValue == null) {
return null;
}
Debug.Assert(nativeValue is UnsafeNativeMethods.IPicture, "nativevalue is not IPicture");
UnsafeNativeMethods.IPicture nativePicture = (UnsafeNativeMethods.IPicture)nativeValue;
IntPtr handle = nativePicture.GetHandle();
if (lastManaged != null && handle == lastNativeHandle) {
return lastManaged;
}
lastNativeHandle = handle;
//lastPalette = nativePicture.GetHPal();
if (handle != IntPtr.Zero) {
switch (nativePicture.GetPictureType()) {
case NativeMethods.Ole.PICTYPE_ICON:
pictureType = typeof(Icon);
lastManaged = Icon.FromHandle(handle);
break;
case NativeMethods.Ole.PICTYPE_BITMAP:
pictureType = typeof(Bitmap);
lastManaged = Image.FromHbitmap(handle);
break;
default:
Debug.Fail("Unknown picture type");
break;
}
pictureRef = new WeakReference(nativePicture);
}
else {
lastManaged = null;
pictureRef = null;
}
return lastManaged;
}
///
///
/// Converts the managed value into a native value
///
public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) {
// don't cancel the set
cancelSet = false;
if (lastManaged != null && lastManaged.Equals(managedValue) && pictureRef != null && pictureRef.IsAlive) {
return pictureRef.Target;
}
// we have to build an IPicture
lastManaged = managedValue;
if (managedValue != null) {
Guid g = typeof(UnsafeNativeMethods.IPicture).GUID;
NativeMethods.PICTDESC pictdesc = null;
bool own = false;
if (lastManaged is Icon) {
pictdesc = NativeMethods.PICTDESC.CreateIconPICTDESC(((Icon)lastManaged).Handle);
}
else if (lastManaged is Bitmap) {
pictdesc = NativeMethods.PICTDESC.CreateBitmapPICTDESC(((Bitmap)lastManaged).GetHbitmap(), lastPalette);
own = true;
}
else {
Debug.Fail("Unknown Image type: " + managedValue.GetType().Name);
}
UnsafeNativeMethods.IPicture pict = UnsafeNativeMethods.OleCreatePictureIndirect(pictdesc, ref g, own);
lastNativeHandle = pict.GetHandle();
pictureRef = new WeakReference(pict);
return pict;
}
else {
lastManaged = null;
lastNativeHandle = lastPalette = IntPtr.Zero;
pictureRef = null;
return null;
}
}
}
}
// 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
- SqlConnectionPoolProviderInfo.cs
- ReversePositionQuery.cs
- DesignerHierarchicalDataSourceView.cs
- UseLicense.cs
- Point4D.cs
- CodeAttributeArgument.cs
- HtmlTextArea.cs
- DefaultCommandConverter.cs
- Geometry3D.cs
- RequestQueryProcessor.cs
- SecurityChannelFaultConverter.cs
- X509CertificateStore.cs
- ExclusiveCanonicalizationTransform.cs
- ParserOptions.cs
- LayoutEvent.cs
- SimplePropertyEntry.cs
- AppSecurityManager.cs
- SchemeSettingElement.cs
- DescriptionAttribute.cs
- TypeDescriptorContext.cs
- XPathNode.cs
- HtmlCalendarAdapter.cs
- WindowsPen.cs
- MemoryMappedViewStream.cs
- FixedPosition.cs
- NameValueSectionHandler.cs
- CompareValidator.cs
- SiteMapPath.cs
- ComponentDispatcher.cs
- TextServicesManager.cs
- ModelItemDictionaryImpl.cs
- DataGridRowDetailsEventArgs.cs
- ColorBlend.cs
- DispatcherTimer.cs
- ServiceEndpoint.cs
- GeometryModel3D.cs
- RemoteEndpointMessageProperty.cs
- GridViewEditEventArgs.cs
- RightsManagementEncryptionTransform.cs
- LingerOption.cs
- XPathNodeHelper.cs
- SpotLight.cs
- CodeGeneratorOptions.cs
- SelectedDatesCollection.cs
- VariableBinder.cs
- RtfFormatStack.cs
- ExceptionUtil.cs
- NavigationExpr.cs
- CqlBlock.cs
- ActivationProxy.cs
- CalloutQueueItem.cs
- FontWeight.cs
- DocumentPageHost.cs
- SharedPerformanceCounter.cs
- Axis.cs
- Point3DCollection.cs
- BinaryUtilClasses.cs
- InstanceDescriptor.cs
- GridErrorDlg.cs
- ColorConverter.cs
- SelectionItemPattern.cs
- UriWriter.cs
- EntityDesignerDataSourceView.cs
- TableCellCollection.cs
- LayoutDump.cs
- BuildResultCache.cs
- CompressStream.cs
- CaseExpr.cs
- XmlAutoDetectWriter.cs
- SplitterEvent.cs
- Preprocessor.cs
- FunctionUpdateCommand.cs
- Dispatcher.cs
- mediaeventargs.cs
- ObsoleteAttribute.cs
- ZipArchive.cs
- SmiXetterAccessMap.cs
- DirectionalLight.cs
- QueryStringConverter.cs
- UrlMappingsModule.cs
- CellLabel.cs
- RuntimeArgumentHandle.cs
- AccessDataSource.cs
- HttpProfileBase.cs
- ModelTreeEnumerator.cs
- CheckBoxList.cs
- ZipIOBlockManager.cs
- XmlSchemaComplexContentRestriction.cs
- ServiceDefaults.cs
- BamlTreeUpdater.cs
- Attributes.cs
- XmlTextReaderImplHelpers.cs
- MetadataArtifactLoaderResource.cs
- PeerObject.cs
- StreamReader.cs
- PerfCounters.cs
- Converter.cs
- StorageEntityTypeMapping.cs
- PerfProviderCollection.cs
- CodeSnippetCompileUnit.cs