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
- ToolStripActionList.cs
- HostSecurityManager.cs
- mediapermission.cs
- ValidationRuleCollection.cs
- DnsPermission.cs
- ObjectNavigationPropertyMapping.cs
- MasterPageBuildProvider.cs
- MenuItemBindingCollection.cs
- DataObjectEventArgs.cs
- SerialErrors.cs
- DesigntimeLicenseContextSerializer.cs
- XamlFilter.cs
- Rect3D.cs
- TraceData.cs
- EventDescriptorCollection.cs
- UniqueEventHelper.cs
- HostingEnvironmentSection.cs
- ICspAsymmetricAlgorithm.cs
- Rule.cs
- NativeMethods.cs
- TextParagraphProperties.cs
- TextRangeBase.cs
- ValidationHelpers.cs
- SqlDataSourceFilteringEventArgs.cs
- ParseElement.cs
- DefinitionBase.cs
- GridViewPageEventArgs.cs
- ConstructorNeedsTagAttribute.cs
- RtfControlWordInfo.cs
- LocatorBase.cs
- ToolStrip.cs
- UserPreferenceChangingEventArgs.cs
- FilterException.cs
- BinaryVersion.cs
- ProfileGroupSettings.cs
- OptionUsage.cs
- Latin1Encoding.cs
- IsolatedStoragePermission.cs
- CoordinationService.cs
- PenCursorManager.cs
- MatrixTransform.cs
- ObjectKeyFrameCollection.cs
- Matrix.cs
- ApplicationInfo.cs
- BitmapEffectrendercontext.cs
- TriggerCollection.cs
- ImportCatalogPart.cs
- WindowsToolbarAsMenu.cs
- AncestorChangedEventArgs.cs
- ServiceModelConfigurationSection.cs
- SingleQueryOperator.cs
- ResourcePool.cs
- IntegerValidator.cs
- NumberFormatter.cs
- AppearanceEditorPart.cs
- WsatServiceCertificate.cs
- InplaceBitmapMetadataWriter.cs
- MiniAssembly.cs
- RsaSecurityKey.cs
- ContractCodeDomInfo.cs
- CommentEmitter.cs
- SeekStoryboard.cs
- Helpers.cs
- XmlMapping.cs
- Content.cs
- ProfilePropertyNameValidator.cs
- OrderedDictionaryStateHelper.cs
- GestureRecognitionResult.cs
- PersonalizationStateInfoCollection.cs
- AssemblyAttributesGoHere.cs
- FusionWrap.cs
- MorphHelper.cs
- SecurityContextSecurityTokenParameters.cs
- AppDomainProtocolHandler.cs
- CriticalHandle.cs
- FileFormatException.cs
- XmlStreamStore.cs
- SignatureHelper.cs
- XmlNamespaceMappingCollection.cs
- SocketManager.cs
- DesignerPerfEventProvider.cs
- ToolStripScrollButton.cs
- XmlDownloadManager.cs
- mil_sdk_version.cs
- HttpListener.cs
- ApplicationHost.cs
- DetailsView.cs
- ParameterModifier.cs
- CreatingCookieEventArgs.cs
- MetadataArtifactLoader.cs
- InvalidComObjectException.cs
- PromptEventArgs.cs
- CompositionTarget.cs
- ChtmlTextWriter.cs
- ClientProxyGenerator.cs
- DesignerRegionCollection.cs
- HttpDigestClientCredential.cs
- ProgressPage.cs
- AccessText.cs
- ProtectedConfiguration.cs