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
- InheritanceAttribute.cs
- OAVariantLib.cs
- HtmlTitle.cs
- WindowsAuthenticationEventArgs.cs
- DebugView.cs
- EntitySqlException.cs
- PreloadedPackages.cs
- ErrorActivity.cs
- TemplateBindingExtension.cs
- GridProviderWrapper.cs
- RenderCapability.cs
- EndpointAddress10.cs
- PolicyStatement.cs
- DeclaredTypeElement.cs
- TableLayout.cs
- HTTPNotFoundHandler.cs
- UpdateExpressionVisitor.cs
- CompressionTransform.cs
- XmlBinaryReader.cs
- PolyLineSegmentFigureLogic.cs
- PriorityBinding.cs
- DbConnectionInternal.cs
- xamlnodes.cs
- HitTestParameters.cs
- MatcherBuilder.cs
- DataObjectSettingDataEventArgs.cs
- TypeGeneratedEventArgs.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- FtpCachePolicyElement.cs
- MdImport.cs
- ArglessEventHandlerProxy.cs
- NamedPermissionSet.cs
- SerializationInfoEnumerator.cs
- Cursors.cs
- TextAnchor.cs
- DotExpr.cs
- TemplatedControlDesigner.cs
- IconHelper.cs
- SafeRightsManagementHandle.cs
- AnnouncementInnerClientCD1.cs
- AdjustableArrowCap.cs
- PngBitmapDecoder.cs
- BaseProcessor.cs
- DeleteIndexBinder.cs
- Membership.cs
- CommonProperties.cs
- ResXResourceReader.cs
- Calendar.cs
- DetailsViewRowCollection.cs
- autovalidator.cs
- SelectionHighlightInfo.cs
- CodeArrayCreateExpression.cs
- ParagraphVisual.cs
- NavigationCommands.cs
- PreviewKeyDownEventArgs.cs
- TextDecoration.cs
- UnsafeNativeMethods.cs
- RegexReplacement.cs
- XmlHierarchyData.cs
- StringAnimationUsingKeyFrames.cs
- ConfigXmlText.cs
- ButtonChrome.cs
- MarshalByValueComponent.cs
- ApplicationCommands.cs
- CodeVariableDeclarationStatement.cs
- SafeNativeMethodsMilCoreApi.cs
- SocketAddress.cs
- TagPrefixAttribute.cs
- ThicknessAnimationBase.cs
- PerformanceCounter.cs
- LineBreakRecord.cs
- DuplexClientBase.cs
- initElementDictionary.cs
- ExpandSegmentCollection.cs
- NavigateUrlConverter.cs
- BamlBinaryReader.cs
- MultiTrigger.cs
- BinaryMethodMessage.cs
- PeerTransportCredentialType.cs
- Enlistment.cs
- ProgressBar.cs
- SoapMessage.cs
- Membership.cs
- ReaderOutput.cs
- DataListItemCollection.cs
- MemberMaps.cs
- WindowsRebar.cs
- SafeBitVector32.cs
- ReadOnlyDataSourceView.cs
- WebMessageEncodingBindingElement.cs
- JsonFormatWriterGenerator.cs
- HostingEnvironmentException.cs
- AuthenticatingEventArgs.cs
- ProtectedConfigurationProviderCollection.cs
- NavigationPropertyAccessor.cs
- CookieParameter.cs
- EntityDataSourceReferenceGroup.cs
- ReadOnlyCollectionBase.cs
- InfoCardService.cs
- FtpRequestCacheValidator.cs