Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ReadOnlyHierarchicalDataSource.cs
- FrameworkElementFactory.cs
- TextChangedEventArgs.cs
- DesignerOptionService.cs
- XmlLoader.cs
- DataBindEngine.cs
- WebMessageFormatHelper.cs
- SecurityUtils.cs
- CfgArc.cs
- ScrollProperties.cs
- TextContainerChangedEventArgs.cs
- ColumnResizeAdorner.cs
- PageSetupDialog.cs
- SrgsOneOf.cs
- EventLogPermissionHolder.cs
- RootAction.cs
- OSFeature.cs
- StringUtil.cs
- HelpProvider.cs
- EDesignUtil.cs
- DecoderExceptionFallback.cs
- InternalConfigConfigurationFactory.cs
- Int64AnimationBase.cs
- FaultImportOptions.cs
- ContainerAction.cs
- PrintPreviewDialog.cs
- FilteredDataSetHelper.cs
- ImageConverter.cs
- RectangleHotSpot.cs
- ArgumentException.cs
- CornerRadiusConverter.cs
- RSAPKCS1SignatureFormatter.cs
- KeyedHashAlgorithm.cs
- PaperSize.cs
- SoapProtocolImporter.cs
- WriteableBitmap.cs
- SourceLineInfo.cs
- CodeCommentStatement.cs
- DecoderBestFitFallback.cs
- FilteredDataSetHelper.cs
- SkinBuilder.cs
- XmlDataDocument.cs
- TemplatePropertyEntry.cs
- DataIdProcessor.cs
- ResXBuildProvider.cs
- PropertyEntry.cs
- TraceEventCache.cs
- UnhandledExceptionEventArgs.cs
- SqlBooleanMismatchVisitor.cs
- StringValueSerializer.cs
- WindowsGraphics.cs
- DoubleConverter.cs
- SubMenuStyleCollection.cs
- WebPartVerb.cs
- COSERVERINFO.cs
- CustomError.cs
- Camera.cs
- ValueSerializerAttribute.cs
- DataRecordInfo.cs
- ToolStripSplitButton.cs
- ListBox.cs
- Property.cs
- SchemaEntity.cs
- TemplateControl.cs
- Range.cs
- TextEvent.cs
- StyleBamlRecordReader.cs
- TemplateControlBuildProvider.cs
- PageCatalogPart.cs
- HwndAppCommandInputProvider.cs
- CategoriesDocumentFormatter.cs
- DataSourceControl.cs
- ClientSettings.cs
- JsonQNameDataContract.cs
- ColorConvertedBitmap.cs
- ClientTargetSection.cs
- dbenumerator.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- DiscoveryUtility.cs
- httpserverutility.cs
- RuntimeConfigLKG.cs
- CompositeActivityTypeDescriptor.cs
- PagesChangedEventArgs.cs
- DeclaredTypeValidator.cs
- RegexCapture.cs
- IIS7WorkerRequest.cs
- InvalidDocumentContentsException.cs
- DataGridTextColumn.cs
- BrowsableAttribute.cs
- ArraySortHelper.cs
- DetailsViewInsertedEventArgs.cs
- TrackingSection.cs
- ColumnWidthChangedEvent.cs
- RuntimeArgumentHandle.cs
- AuthenticationSection.cs
- TrustLevel.cs
- TypeConverterValueSerializer.cs
- SoapFormatterSinks.cs
- AsyncOperation.cs
- NonClientArea.cs