Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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. // //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AuthStoreRoleProvider.cs
- InboundActivityHelper.cs
- versioninfo.cs
- KnownIds.cs
- TextTabProperties.cs
- EntityExpressionVisitor.cs
- ValuePatternIdentifiers.cs
- ReceiveMessageContent.cs
- Action.cs
- GreenMethods.cs
- TreeView.cs
- InputProcessorProfilesLoader.cs
- ObjectDataSourceFilteringEventArgs.cs
- SchemaObjectWriter.cs
- TransactionFormatter.cs
- SamlAuthorizationDecisionStatement.cs
- GridErrorDlg.cs
- IdentityHolder.cs
- ColumnTypeConverter.cs
- XmlnsDictionary.cs
- TdsValueSetter.cs
- NullableDecimalMinMaxAggregationOperator.cs
- OuterProxyWrapper.cs
- SqlTypeSystemProvider.cs
- MailAddress.cs
- Repeater.cs
- BaseHashHelper.cs
- MetaModel.cs
- ResourcePermissionBase.cs
- SqlRemoveConstantOrderBy.cs
- PolicyException.cs
- DllNotFoundException.cs
- Splitter.cs
- ComponentCollection.cs
- BCLDebug.cs
- CodeConstructor.cs
- Formatter.cs
- TableSectionStyle.cs
- TabControlDesigner.cs
- DbConnectionPoolCounters.cs
- SocketException.cs
- TableRowCollection.cs
- DataTrigger.cs
- XmlParser.cs
- LabelLiteral.cs
- BridgeDataReader.cs
- KeyManager.cs
- DataGridViewDataConnection.cs
- TextTreeTextNode.cs
- ByteStreamMessage.cs
- FtpCachePolicyElement.cs
- IntSecurity.cs
- RoutingConfiguration.cs
- TextEditorTyping.cs
- ConfigurationElementProperty.cs
- PointAnimation.cs
- TransactionCache.cs
- MatchingStyle.cs
- Stylesheet.cs
- WebPartCancelEventArgs.cs
- PinnedBufferMemoryStream.cs
- ImageCodecInfoPrivate.cs
- infer.cs
- EncryptedReference.cs
- Crc32.cs
- XmlSchemaAppInfo.cs
- ForceCopyBuildProvider.cs
- ScrollChrome.cs
- FormsAuthenticationEventArgs.cs
- SqlTransaction.cs
- BaseTemplateBuildProvider.cs
- ConsoleTraceListener.cs
- NamespaceList.cs
- IxmlLineInfo.cs
- IPAddressCollection.cs
- EditorOptionAttribute.cs
- MeasurementDCInfo.cs
- PeerApplicationLaunchInfo.cs
- Transform3D.cs
- RSAOAEPKeyExchangeFormatter.cs
- StandardCommands.cs
- ArgumentValidation.cs
- DetailsViewModeEventArgs.cs
- AssertFilter.cs
- HttpFileCollectionBase.cs
- CryptoApi.cs
- AstNode.cs
- StylusEventArgs.cs
- RoutedEventConverter.cs
- DataBoundLiteralControl.cs
- SamlNameIdentifierClaimResource.cs
- StaticResourceExtension.cs
- XPathDocument.cs
- HtmlControl.cs
- AncillaryOps.cs
- ExpressionEditorAttribute.cs
- AppDomainAttributes.cs
- URLString.cs
- CatalogPartCollection.cs
- PrintPreviewDialog.cs