Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinkedResourceCollection.cs
- XsltLibrary.cs
- CompilationUnit.cs
- ReturnValue.cs
- StringResourceManager.cs
- WebPartsSection.cs
- MenuItem.cs
- IssuedTokenClientCredential.cs
- ToolStripLocationCancelEventArgs.cs
- CleanUpVirtualizedItemEventArgs.cs
- ScriptManagerProxy.cs
- ToolStripSeparator.cs
- LookupBindingPropertiesAttribute.cs
- BitSet.cs
- LightweightEntityWrapper.cs
- COMException.cs
- Gdiplus.cs
- WebErrorHandler.cs
- CleanUpVirtualizedItemEventArgs.cs
- BulletChrome.cs
- BoundField.cs
- TimersDescriptionAttribute.cs
- ConstraintCollection.cs
- XmlMapping.cs
- TransformGroup.cs
- OneToOneMappingSerializer.cs
- WebBrowserPermission.cs
- Point4DValueSerializer.cs
- BoundingRectTracker.cs
- ConsumerConnectionPointCollection.cs
- Journaling.cs
- SessionParameter.cs
- TableRow.cs
- DataTableNewRowEvent.cs
- RepeaterItemEventArgs.cs
- BrowserInteropHelper.cs
- XmlNode.cs
- DateTime.cs
- XmlChoiceIdentifierAttribute.cs
- ConfigXmlText.cs
- updateconfighost.cs
- returneventsaver.cs
- Error.cs
- storepermissionattribute.cs
- ListDictionary.cs
- ElementAction.cs
- BitmapSizeOptions.cs
- FontStyleConverter.cs
- TreeNodeMouseHoverEvent.cs
- ConnectionPointCookie.cs
- EntityChangedParams.cs
- DrawTreeNodeEventArgs.cs
- ReadOnlyPropertyMetadata.cs
- MetadataPropertyCollection.cs
- WebServiceTypeData.cs
- XmlSerializerNamespaces.cs
- Crc32.cs
- SqlBooleanMismatchVisitor.cs
- HttpCookiesSection.cs
- precedingsibling.cs
- TileModeValidation.cs
- Domain.cs
- AvTrace.cs
- Currency.cs
- EmbeddedMailObject.cs
- Matrix.cs
- _HelperAsyncResults.cs
- Tablet.cs
- HierarchicalDataTemplate.cs
- Int16KeyFrameCollection.cs
- CardSpaceShim.cs
- TdsParameterSetter.cs
- CmsUtils.cs
- TransformerTypeCollection.cs
- ValueConversionAttribute.cs
- Point3DAnimation.cs
- DesignerContextDescriptor.cs
- WebServicesDescriptionAttribute.cs
- XmlNamespaceManager.cs
- Msec.cs
- XmlUtilWriter.cs
- listitem.cs
- LockedActivityGlyph.cs
- DataObjectCopyingEventArgs.cs
- TypeConverterHelper.cs
- ObjectStateFormatter.cs
- WinEventTracker.cs
- BitFlagsGenerator.cs
- DES.cs
- SequentialOutput.cs
- SqlXmlStorage.cs
- PagedControl.cs
- XPathNavigatorReader.cs
- CharStorage.cs
- LZCodec.cs
- GroupBox.cs
- _DomainName.cs
- SettingsSavedEventArgs.cs
- XsdBuildProvider.cs
- HtmlLink.cs