Code:
/ FX-1434 / FX-1434 / 1.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
- HuffCodec.cs
- DebugTraceHelper.cs
- Unit.cs
- WhitespaceRuleLookup.cs
- DoubleAnimationUsingPath.cs
- SettingsSection.cs
- Vector3DAnimation.cs
- EtwProvider.cs
- ConnectionsZone.cs
- EdmToObjectNamespaceMap.cs
- PrintPreviewGraphics.cs
- __TransparentProxy.cs
- RemotingException.cs
- safesecurityhelperavalon.cs
- SqlStatistics.cs
- RoutingEndpointTrait.cs
- DataServiceRequestException.cs
- PolicyLevel.cs
- ConstraintConverter.cs
- SettingsProviderCollection.cs
- AnyAllSearchOperator.cs
- CqlErrorHelper.cs
- PeerInputChannelListener.cs
- Keywords.cs
- ResourcePool.cs
- PriorityBinding.cs
- TypeUnloadedException.cs
- BindingWorker.cs
- InkPresenter.cs
- ClockController.cs
- IPPacketInformation.cs
- DialogWindow.cs
- ComponentFactoryHelpers.cs
- XmlTextReaderImpl.cs
- OutputCacheModule.cs
- DataGridRelationshipRow.cs
- FieldBuilder.cs
- FormViewRow.cs
- DisplayInformation.cs
- ProfessionalColorTable.cs
- DPCustomTypeDescriptor.cs
- TextMetrics.cs
- HtmlEmptyTagControlBuilder.cs
- XPathQilFactory.cs
- XmlValidatingReaderImpl.cs
- SetterBase.cs
- Vector3DKeyFrameCollection.cs
- ActivityInstance.cs
- ReadOnlyCollectionBase.cs
- MergeLocalizationDirectives.cs
- PhoneCallDesigner.cs
- TabItemWrapperAutomationPeer.cs
- DataGridAutoFormatDialog.cs
- MeasurementDCInfo.cs
- Camera.cs
- DPAPIProtectedConfigurationProvider.cs
- PeerTransportListenAddressConverter.cs
- BlurEffect.cs
- TypeSystemProvider.cs
- BaseValidatorDesigner.cs
- Ticks.cs
- BindingRestrictions.cs
- FlowDocumentPaginator.cs
- ConfigurationConverterBase.cs
- AssemblyResourceLoader.cs
- TextElementEditingBehaviorAttribute.cs
- XNodeNavigator.cs
- EUCJPEncoding.cs
- HwndHostAutomationPeer.cs
- MouseDevice.cs
- StrokeFIndices.cs
- ECDiffieHellman.cs
- HScrollProperties.cs
- DependencyProperty.cs
- DesignerRegion.cs
- ViewManager.cs
- CallbackValidator.cs
- Visitors.cs
- DelegatingTypeDescriptionProvider.cs
- SmtpDigestAuthenticationModule.cs
- ScriptDescriptor.cs
- InkCanvasSelection.cs
- PersonalizationProviderHelper.cs
- DropShadowBitmapEffect.cs
- ObjectQueryState.cs
- RepeaterItemCollection.cs
- BaseCAMarshaler.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- BinaryObjectInfo.cs
- CodeCatchClause.cs
- CompiledQuery.cs
- BookmarkManager.cs
- BamlVersionHeader.cs
- FileAuthorizationModule.cs
- SchemaElement.cs
- ArgumentOutOfRangeException.cs
- TemplateBindingExtensionConverter.cs
- ToolboxItemAttribute.cs
- FormViewInsertEventArgs.cs
- SafeMILHandle.cs