Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2FontConverter.cs / 1 / COM2FontConverter.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms.ComponentModel.Com2Interop { using System.Runtime.Serialization.Formatters; using System.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System; using System.Drawing; using System.Collections; using Microsoft.Win32; ////// /// This class maps an OLE_COLOR to a managed Color editor. /// internal class Com2FontConverter : Com2DataTypeToManagedDataTypeConverter { private IntPtr lastHandle = IntPtr.Zero; private Font lastFont = null; public override bool AllowExpand { get { return true; } } ////// /// Returns the managed type that this editor maps the property type to. /// public override Type ManagedType { get { return typeof(Font); } } ////// /// Converts the native value into a managed value /// public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) { // we're getting an IFont thing here UnsafeNativeMethods.IFont nativeFont = nativeValue as UnsafeNativeMethods.IFont; if (nativeFont == null) { lastHandle = IntPtr.Zero; lastFont = Control.DefaultFont; return lastFont; } IntPtr fontHandle = nativeFont.GetHFont(); // see if we have this guy cached if (fontHandle == lastHandle && lastFont != null) { return lastFont; } lastHandle = fontHandle; try { // this wasn't working because it was converting everything to // world units. // Font font = Font.FromHfont(lastHandle); try { lastFont = ControlPaint.FontInPoints(font); } finally { font.Dispose(); } } catch(ArgumentException) { // we will fail on non-truetype fonts, so // just use the default font. lastFont = Control.DefaultFont; } return lastFont; } ////// /// Converts the managed value into a native value /// public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) { // we default to black. // if (managedValue == null) { managedValue = Control.DefaultFont; } cancelSet = true; if (lastFont != null && lastFont.Equals(managedValue)) { // don't do anything here. return null; } lastFont = (Font)managedValue; UnsafeNativeMethods.IFont nativeFont = (UnsafeNativeMethods.IFont)pd.GetNativeValue(pd.TargetObject); // now, push all the values into the native side if (nativeFont != null) { bool changed = ControlPaint.FontToIFont(lastFont, nativeFont); if (changed) { // here, we want to pick up a new font from the handle lastFont = null; ConvertNativeToManaged(nativeFont, pd); } } 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.Runtime.InteropServices; using System.ComponentModel; using System.Diagnostics; using System; using System.Drawing; using System.Collections; using Microsoft.Win32; ////// /// This class maps an OLE_COLOR to a managed Color editor. /// internal class Com2FontConverter : Com2DataTypeToManagedDataTypeConverter { private IntPtr lastHandle = IntPtr.Zero; private Font lastFont = null; public override bool AllowExpand { get { return true; } } ////// /// Returns the managed type that this editor maps the property type to. /// public override Type ManagedType { get { return typeof(Font); } } ////// /// Converts the native value into a managed value /// public override object ConvertNativeToManaged(object nativeValue, Com2PropertyDescriptor pd) { // we're getting an IFont thing here UnsafeNativeMethods.IFont nativeFont = nativeValue as UnsafeNativeMethods.IFont; if (nativeFont == null) { lastHandle = IntPtr.Zero; lastFont = Control.DefaultFont; return lastFont; } IntPtr fontHandle = nativeFont.GetHFont(); // see if we have this guy cached if (fontHandle == lastHandle && lastFont != null) { return lastFont; } lastHandle = fontHandle; try { // this wasn't working because it was converting everything to // world units. // Font font = Font.FromHfont(lastHandle); try { lastFont = ControlPaint.FontInPoints(font); } finally { font.Dispose(); } } catch(ArgumentException) { // we will fail on non-truetype fonts, so // just use the default font. lastFont = Control.DefaultFont; } return lastFont; } ////// /// Converts the managed value into a native value /// public override object ConvertManagedToNative(object managedValue, Com2PropertyDescriptor pd, ref bool cancelSet) { // we default to black. // if (managedValue == null) { managedValue = Control.DefaultFont; } cancelSet = true; if (lastFont != null && lastFont.Equals(managedValue)) { // don't do anything here. return null; } lastFont = (Font)managedValue; UnsafeNativeMethods.IFont nativeFont = (UnsafeNativeMethods.IFont)pd.GetNativeValue(pd.TargetObject); // now, push all the values into the native side if (nativeFont != null) { bool changed = ControlPaint.FontToIFont(lastFont, nativeFont); if (changed) { // here, we want to pick up a new font from the handle lastFont = null; ConvertNativeToManaged(nativeFont, pd); } } 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
- BaseDataList.cs
- PartialTrustVisibleAssemblyCollection.cs
- Tokenizer.cs
- DataServiceContext.cs
- Component.cs
- MultipartIdentifier.cs
- SrgsItemList.cs
- RegexReplacement.cs
- TableAdapterManagerGenerator.cs
- PartialCachingAttribute.cs
- SqlError.cs
- ValidationErrorCollection.cs
- Screen.cs
- Point3DKeyFrameCollection.cs
- UIElementParaClient.cs
- CSharpCodeProvider.cs
- TextSerializer.cs
- EventLogPermissionAttribute.cs
- CollectionContainer.cs
- SimpleTextLine.cs
- UnhandledExceptionEventArgs.cs
- RelationshipEndMember.cs
- WebSysDescriptionAttribute.cs
- HandlerFactoryCache.cs
- JumpPath.cs
- PeerApplication.cs
- UIPermission.cs
- ChameleonKey.cs
- Run.cs
- ResourceManager.cs
- XmlSchemaNotation.cs
- ObjectSecurityT.cs
- DynamicRenderer.cs
- Int64Converter.cs
- AppDomainFactory.cs
- GC.cs
- Collection.cs
- CustomExpression.cs
- AuthenticationConfig.cs
- DecimalAnimationUsingKeyFrames.cs
- OperationCanceledException.cs
- AssemblyGen.cs
- GridItemPattern.cs
- ValueTable.cs
- AtomServiceDocumentSerializer.cs
- Control.cs
- ButtonAutomationPeer.cs
- PhysicalAddress.cs
- AuthenticationService.cs
- BamlLocalizableResource.cs
- InfoCardRSACryptoProvider.cs
- SqlConnectionFactory.cs
- TdsParser.cs
- ProfileParameter.cs
- LabelEditEvent.cs
- UIElementParagraph.cs
- RNGCryptoServiceProvider.cs
- SettingsContext.cs
- SoapIncludeAttribute.cs
- FrugalList.cs
- MsmqInputChannelBase.cs
- DataGridBeginningEditEventArgs.cs
- DescendentsWalker.cs
- MutexSecurity.cs
- DataGridViewRowsRemovedEventArgs.cs
- UIElementHelper.cs
- VersionValidator.cs
- ThreadAbortException.cs
- WebPermission.cs
- ManagementEventWatcher.cs
- XmlSchemaImport.cs
- HtmlInputButton.cs
- CompModSwitches.cs
- WorkItem.cs
- PolygonHotSpot.cs
- ConfigXmlCDataSection.cs
- WarningException.cs
- Empty.cs
- UrlAuthFailedErrorFormatter.cs
- TextElementEnumerator.cs
- FieldBuilder.cs
- AutoResetEvent.cs
- ScrollContentPresenter.cs
- CreateParams.cs
- BadImageFormatException.cs
- TextServicesCompartmentEventSink.cs
- Point.cs
- SymbolUsageManager.cs
- ObjectQueryProvider.cs
- Literal.cs
- GlyphRunDrawing.cs
- XMLSchema.cs
- CollectionDataContract.cs
- CollectionChangeEventArgs.cs
- ExternalFile.cs
- ReaderOutput.cs
- UIHelper.cs
- ParseChildrenAsPropertiesAttribute.cs
- ConditionalWeakTable.cs
- WebServicesSection.cs