Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2PictureConverter.cs / 1305376 / 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;
using System.Runtime.Versioning;
///
///
/// 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
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
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
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
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;
using System.Runtime.Versioning;
///
///
/// 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
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
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
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
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
- CharEnumerator.cs
- XmlFormatExtensionPrefixAttribute.cs
- controlskin.cs
- VectorAnimationBase.cs
- WebPartVerbCollection.cs
- SqlProviderManifest.cs
- SchemaMapping.cs
- ListViewItemCollectionEditor.cs
- TextRenderingModeValidation.cs
- LeaseManager.cs
- TTSEngineTypes.cs
- NameValuePair.cs
- Quaternion.cs
- AsymmetricKeyExchangeDeformatter.cs
- DiscoveryClientProtocol.cs
- BlobPersonalizationState.cs
- SafeLibraryHandle.cs
- SchemaInfo.cs
- SHA256Managed.cs
- JournalEntry.cs
- StringUtil.cs
- PartManifestEntry.cs
- Flowchart.cs
- StickyNote.cs
- CodePrimitiveExpression.cs
- InertiaRotationBehavior.cs
- ProfessionalColors.cs
- HandleTable.cs
- RegisteredHiddenField.cs
- XmlWriter.cs
- ProxyElement.cs
- TagPrefixCollection.cs
- querybuilder.cs
- Pair.cs
- TraceContextEventArgs.cs
- Underline.cs
- QuaternionKeyFrameCollection.cs
- XmlSortKeyAccumulator.cs
- XamlContextStack.cs
- AutomationFocusChangedEventArgs.cs
- RepeaterCommandEventArgs.cs
- TcpServerChannel.cs
- ExtendedPropertyDescriptor.cs
- Expander.cs
- X509SecurityTokenAuthenticator.cs
- InvalidCommandTreeException.cs
- SecurityAlgorithmSuite.cs
- GeneralTransform3DGroup.cs
- SByteStorage.cs
- CultureTableRecord.cs
- QuadTree.cs
- HiddenFieldPageStatePersister.cs
- AstTree.cs
- RowToFieldTransformer.cs
- PageParser.cs
- SafeRightsManagementPubHandle.cs
- CreateRefExpr.cs
- BlockUIContainer.cs
- Slider.cs
- ImageBrush.cs
- LookupNode.cs
- EventLogPermissionAttribute.cs
- GorillaCodec.cs
- DecoderExceptionFallback.cs
- EntityTypeEmitter.cs
- ParallelTimeline.cs
- EditorPartChrome.cs
- ConvertTextFrag.cs
- CodeTryCatchFinallyStatement.cs
- XmlArrayAttribute.cs
- SafeLocalMemHandle.cs
- UriParserTemplates.cs
- XmlLanguage.cs
- PermissionSetEnumerator.cs
- DataGridItem.cs
- DataSourceCacheDurationConverter.cs
- SqlInternalConnectionTds.cs
- ObjectListGeneralPage.cs
- EmptyStringExpandableObjectConverter.cs
- SerializationSectionGroup.cs
- ControlUtil.cs
- LinqDataSourceDisposeEventArgs.cs
- ExtendedProperty.cs
- ZeroOpNode.cs
- EventLogger.cs
- BitmapFrameDecode.cs
- OpenFileDialog.cs
- CapabilitiesState.cs
- ResponseBodyWriter.cs
- NameValueCollection.cs
- RequestCacheManager.cs
- LogicalExpr.cs
- BinaryWriter.cs
- DockAndAnchorLayout.cs
- KerberosSecurityTokenAuthenticator.cs
- DesignTimeHTMLTextWriter.cs
- InertiaExpansionBehavior.cs
- XmlSubtreeReader.cs
- SymbolTable.cs
- WebServiceReceive.cs