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
- HtmlAnchor.cs
- DynamicPropertyHolder.cs
- ValidatorUtils.cs
- HyperLinkStyle.cs
- DesigntimeLicenseContext.cs
- ReadOnlyDictionary.cs
- SolidColorBrush.cs
- RootBrowserWindowAutomationPeer.cs
- CmsInterop.cs
- EntityDataSourceUtil.cs
- PathTooLongException.cs
- StylusPoint.cs
- BindUriHelper.cs
- DataViewListener.cs
- SerializationInfo.cs
- AutomationElement.cs
- StandardBindingCollectionElement.cs
- Tuple.cs
- DataObjectPastingEventArgs.cs
- DesignTimeTemplateParser.cs
- RoutingExtensionElement.cs
- LambdaCompiler.Generated.cs
- OperationSelectorBehavior.cs
- TaskResultSetter.cs
- AuthenticationModulesSection.cs
- ImageCodecInfo.cs
- ProfileSection.cs
- SecurityHelper.cs
- HttpServerVarsCollection.cs
- CellNormalizer.cs
- AttributeQuery.cs
- ListControl.cs
- EventNotify.cs
- VirtualizingStackPanel.cs
- Membership.cs
- MenuTracker.cs
- DesignerAdRotatorAdapter.cs
- SAPICategories.cs
- WebProxyScriptElement.cs
- ActivityInterfaces.cs
- CookieProtection.cs
- MetadataItem.cs
- ImageField.cs
- DocumentsTrace.cs
- PixelShader.cs
- TextWriter.cs
- ObjectDataSourceMethodEventArgs.cs
- oledbmetadatacolumnnames.cs
- PerformanceCounterCategory.cs
- FtpWebRequest.cs
- RoutedUICommand.cs
- Resources.Designer.cs
- XmlSchemaExporter.cs
- TraceContextEventArgs.cs
- TreeNodeBinding.cs
- DesignerTransaction.cs
- ExpressionValueEditor.cs
- PeerApplication.cs
- DynamicContractTypeBuilder.cs
- Operand.cs
- ToolStripItem.cs
- ItemsPresenter.cs
- XdrBuilder.cs
- DisplayInformation.cs
- TransformedBitmap.cs
- ScrollEvent.cs
- regiisutil.cs
- CellNormalizer.cs
- FontResourceCache.cs
- CacheDict.cs
- RawStylusSystemGestureInputReport.cs
- odbcmetadatacolumnnames.cs
- TableLayoutSettingsTypeConverter.cs
- ConfigXmlElement.cs
- ReferencedCategoriesDocument.cs
- Deflater.cs
- XdrBuilder.cs
- WebPartDeleteVerb.cs
- RegisteredDisposeScript.cs
- CompiledIdentityConstraint.cs
- RouteUrlExpressionBuilder.cs
- SystemSounds.cs
- MimeMultiPart.cs
- StandardOleMarshalObject.cs
- XmlSchemaInfo.cs
- Object.cs
- Soap.cs
- UIAgentAsyncEndRequest.cs
- sqlstateclientmanager.cs
- LayoutDump.cs
- TrackingMemoryStream.cs
- SafeUserTokenHandle.cs
- ToolTipService.cs
- TemplatedAdorner.cs
- FormsAuthenticationEventArgs.cs
- QilFunction.cs
- TableColumnCollectionInternal.cs
- serverconfig.cs
- ScalarRestriction.cs
- ExpressionBinding.cs