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
- StateItem.cs
- DataServiceConfiguration.cs
- DataTableNewRowEvent.cs
- MinimizableAttributeTypeConverter.cs
- FontFamily.cs
- GregorianCalendar.cs
- TimelineGroup.cs
- CallbackHandler.cs
- ControlCommandSet.cs
- XmlUTF8TextWriter.cs
- xmlglyphRunInfo.cs
- TraceEventCache.cs
- GridViewUpdateEventArgs.cs
- SettingsSection.cs
- ModelVisual3D.cs
- PackWebResponse.cs
- ServiceObjectContainer.cs
- UIElementParagraph.cs
- DataBindingExpressionBuilder.cs
- ColumnClickEvent.cs
- ShutDownListener.cs
- SqlMultiplexer.cs
- SynchronizationContextHelper.cs
- WasEndpointConfigContainer.cs
- TextBounds.cs
- MsmqIntegrationInputChannel.cs
- WindowsListViewScroll.cs
- SelectionProviderWrapper.cs
- ProcessModelInfo.cs
- ErrorHandler.cs
- HttpFileCollectionWrapper.cs
- Calendar.cs
- GeneralTransform.cs
- ServiceOperationListItem.cs
- DurableInstanceManager.cs
- InputBinding.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- PageHandlerFactory.cs
- Pkcs9Attribute.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- ProcessHostFactoryHelper.cs
- UIntPtr.cs
- EntityViewGenerationAttribute.cs
- ServiceNameElementCollection.cs
- XmlDictionaryReaderQuotas.cs
- JumpTask.cs
- SQLSingle.cs
- PageCodeDomTreeGenerator.cs
- EnumerationRangeValidationUtil.cs
- ipaddressinformationcollection.cs
- DesignerInterfaces.cs
- SafeReadContext.cs
- UdpRetransmissionSettings.cs
- ProcessMonitor.cs
- SqlDataSourceStatusEventArgs.cs
- Schedule.cs
- DataGridCell.cs
- ChameleonKey.cs
- DocumentPageViewAutomationPeer.cs
- GroupBox.cs
- VisualTransition.cs
- ProxySimple.cs
- VectorAnimationBase.cs
- QueryCacheEntry.cs
- ConfigXmlComment.cs
- CommandSet.cs
- UIElement3D.cs
- basevalidator.cs
- FromReply.cs
- ContractInstanceProvider.cs
- JumpPath.cs
- ObjectView.cs
- SubpageParaClient.cs
- XmlQueryContext.cs
- DeviceContext.cs
- StringConverter.cs
- PointAnimation.cs
- DefaultAssemblyResolver.cs
- ErrorReporting.cs
- DeferredElementTreeState.cs
- TypeToken.cs
- XmlAttributeAttribute.cs
- HyperlinkAutomationPeer.cs
- Monitor.cs
- Scheduler.cs
- LazyTextWriterCreator.cs
- DataRowView.cs
- GiveFeedbackEventArgs.cs
- ProviderConnectionPointCollection.cs
- VectorValueSerializer.cs
- DataContractAttribute.cs
- AssemblySettingAttributes.cs
- MaskedTextProvider.cs
- Roles.cs
- SocketInformation.cs
- DataGridViewCell.cs
- WorkflowEnvironment.cs
- ToolStripPanelCell.cs
- URLIdentityPermission.cs
- CoreSwitches.cs