Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2FontConverter.cs / 1305376 / 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; using System.Runtime.Versioning; ////// /// 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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; using System.Runtime.Versioning; ////// /// 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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
- CryptoStream.cs
- PixelFormatConverter.cs
- WorkflowMarkupSerializerMapping.cs
- AdornerPresentationContext.cs
- SqlDelegatedTransaction.cs
- Nullable.cs
- ComEventsInfo.cs
- JumpList.cs
- RowToFieldTransformer.cs
- PartitionedStreamMerger.cs
- ServerIdentity.cs
- ObjectContextServiceProvider.cs
- DataServiceResponse.cs
- EntityExpressionVisitor.cs
- WebControlsSection.cs
- ObjectKeyFrameCollection.cs
- CompositeCollection.cs
- FixedSOMLineRanges.cs
- ManagedIStream.cs
- WorkflowPrinting.cs
- XLinq.cs
- ProxyElement.cs
- XPathSingletonIterator.cs
- InstalledFontCollection.cs
- ChameleonKey.cs
- ControlEvent.cs
- ExpressionConverter.cs
- DurationConverter.cs
- ListControl.cs
- PeerApplication.cs
- EndpointNameMessageFilter.cs
- LogicalCallContext.cs
- ColorBlend.cs
- FormView.cs
- StackSpiller.Generated.cs
- SettingsAttributes.cs
- DataSourceSelectArguments.cs
- TypeForwardedToAttribute.cs
- ScriptDescriptor.cs
- SmiMetaData.cs
- EntityParameter.cs
- SecurityContext.cs
- ParserOptions.cs
- LoginName.cs
- SymbolDocumentGenerator.cs
- DetailsViewRowCollection.cs
- DiscardableAttribute.cs
- UrlPropertyAttribute.cs
- FormatterServices.cs
- PaperSize.cs
- BindingNavigator.cs
- TimelineGroup.cs
- ContextMenu.cs
- ValidationVisibilityAttribute.cs
- AsymmetricKeyExchangeDeformatter.cs
- KeyValueSerializer.cs
- SequentialUshortCollection.cs
- DataObjectSettingDataEventArgs.cs
- IDataContractSurrogate.cs
- login.cs
- KeyedCollection.cs
- _BufferOffsetSize.cs
- ScriptServiceAttribute.cs
- DataKeyCollection.cs
- PropertyConverter.cs
- MessageHeaders.cs
- SwitchDesigner.xaml.cs
- BindingListCollectionView.cs
- DetailsViewDeleteEventArgs.cs
- GridViewUpdateEventArgs.cs
- MetaColumn.cs
- CustomAttributeSerializer.cs
- ItemDragEvent.cs
- ReferencedAssemblyResolver.cs
- MaskDescriptors.cs
- ClassData.cs
- WindowsListViewGroupSubsetLink.cs
- ResourcesGenerator.cs
- DocumentScope.cs
- ResourceAssociationTypeEnd.cs
- DataViewManager.cs
- DataGridColumnFloatingHeader.cs
- SmiContextFactory.cs
- PinnedBufferMemoryStream.cs
- SmiXetterAccessMap.cs
- WindowHideOrCloseTracker.cs
- SwitchExpression.cs
- MenuItemStyle.cs
- CodeConstructor.cs
- ClientTarget.cs
- ToolTipService.cs
- SkipStoryboardToFill.cs
- ToolStripTextBox.cs
- AppSecurityManager.cs
- BigInt.cs
- IdentityModelDictionary.cs
- AuthenticationModuleElementCollection.cs
- StreamWriter.cs
- DataGridViewTopLeftHeaderCell.cs
- UInt64.cs