Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PackageRelationship.cs
- SlotInfo.cs
- GraphicsPath.cs
- HttpServerChannel.cs
- DispatchWrapper.cs
- FormParameter.cs
- FormsIdentity.cs
- DbParameterCollection.cs
- ActiveDocumentEvent.cs
- EventToken.cs
- SafeTimerHandle.cs
- DocumentAutomationPeer.cs
- Transform.cs
- Set.cs
- DefaultValueMapping.cs
- ViewManager.cs
- ListViewContainer.cs
- _OSSOCK.cs
- XhtmlConformanceSection.cs
- CachedFontFace.cs
- XslCompiledTransform.cs
- COM2PictureConverter.cs
- GatewayDefinition.cs
- ScrollEventArgs.cs
- EventWaitHandle.cs
- RuntimeComponentFilter.cs
- PenThread.cs
- HtmlInputSubmit.cs
- FindCriteria11.cs
- XmlSerializerNamespaces.cs
- RangeValuePattern.cs
- XmlValueConverter.cs
- CharEntityEncoderFallback.cs
- DetailsViewDeleteEventArgs.cs
- SaveFileDialog.cs
- SectionXmlInfo.cs
- QilPatternVisitor.cs
- BitmapInitialize.cs
- ColorKeyFrameCollection.cs
- SecurityIdentifierConverter.cs
- GenericIdentity.cs
- PrePrepareMethodAttribute.cs
- ToolStripArrowRenderEventArgs.cs
- dbdatarecord.cs
- LazyTextWriterCreator.cs
- CopyAction.cs
- RegularExpressionValidator.cs
- EndpointIdentityConverter.cs
- ItemsPresenter.cs
- AsymmetricKeyExchangeFormatter.cs
- Single.cs
- GridViewSortEventArgs.cs
- FocusManager.cs
- FreezableCollection.cs
- ProfileManager.cs
- EntityFunctions.cs
- CommentGlyph.cs
- InstanceDescriptor.cs
- HostUtils.cs
- dataobject.cs
- ZoneMembershipCondition.cs
- WebPartCatalogCloseVerb.cs
- BitArray.cs
- PersianCalendar.cs
- PrintDialogException.cs
- XmlMapping.cs
- JapaneseCalendar.cs
- EditorAttribute.cs
- ClientRolePrincipal.cs
- ISAPIApplicationHost.cs
- DictionarySectionHandler.cs
- XappLauncher.cs
- EntryIndex.cs
- infer.cs
- ProfileGroupSettings.cs
- Utility.cs
- ScrollBar.cs
- SettingsSection.cs
- EnterpriseServicesHelper.cs
- HandledMouseEvent.cs
- ToolStripDesigner.cs
- DynamicField.cs
- ApplyTemplatesAction.cs
- Pair.cs
- CodeAttributeDeclaration.cs
- IMembershipProvider.cs
- Camera.cs
- XPathNodeInfoAtom.cs
- ActivityBuilderHelper.cs
- XmlByteStreamWriter.cs
- BooleanKeyFrameCollection.cs
- ConnectionPoint.cs
- Axis.cs
- OleCmdHelper.cs
- HttpApplicationFactory.cs
- UInt64.cs
- MobileTextWriter.cs
- DependencyPropertyConverter.cs
- AnnotationResource.cs
- WebPartConnection.cs