Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- ToolStripSeparatorRenderEventArgs.cs
- GridViewRowPresenter.cs
- ScrollBar.cs
- GeometryHitTestResult.cs
- ClusterUtils.cs
- SmtpCommands.cs
- MultilineStringConverter.cs
- XXXInfos.cs
- MailAddress.cs
- TrustLevel.cs
- FormViewInsertedEventArgs.cs
- MDIWindowDialog.cs
- HtmlTable.cs
- ServicePrincipalNameElement.cs
- DockingAttribute.cs
- PassportAuthenticationModule.cs
- TileBrush.cs
- TableCellCollection.cs
- TraversalRequest.cs
- FacetValues.cs
- System.Data_BID.cs
- BigInt.cs
- WS2007FederationHttpBindingElement.cs
- HwndSourceKeyboardInputSite.cs
- ProtocolsConfigurationHandler.cs
- FullTrustAssemblyCollection.cs
- TaiwanCalendar.cs
- DirectoryNotFoundException.cs
- FixedFindEngine.cs
- IntegerValidator.cs
- PriorityBindingExpression.cs
- XmlSchema.cs
- CustomActivityDesigner.cs
- PreservationFileReader.cs
- OLEDB_Util.cs
- DockAndAnchorLayout.cs
- EntityFrameworkVersions.cs
- PrintDialogException.cs
- RSAPKCS1SignatureDeformatter.cs
- RemoveStoryboard.cs
- SqlNotificationRequest.cs
- ProfilePropertyNameValidator.cs
- GenericEnumConverter.cs
- HttpConfigurationSystem.cs
- ThemeInfoAttribute.cs
- GeneratedView.cs
- PageThemeParser.cs
- COM2IProvidePropertyBuilderHandler.cs
- TemplatedWizardStep.cs
- SettingsAttributeDictionary.cs
- ContentFileHelper.cs
- ToolStripPanel.cs
- MatcherBuilder.cs
- CheckBoxBaseAdapter.cs
- TemplateColumn.cs
- ExtensionDataObject.cs
- TextRunCacheImp.cs
- assemblycache.cs
- StickyNote.cs
- InternalConfigHost.cs
- RuleInfoComparer.cs
- NumericExpr.cs
- LogicalExpressionTypeConverter.cs
- SyndicationDeserializer.cs
- WebEventCodes.cs
- DoubleCollectionConverter.cs
- UnSafeCharBuffer.cs
- PointAnimationUsingPath.cs
- CompatibleComparer.cs
- ConfigurationManager.cs
- DbConnectionHelper.cs
- StrokeNodeEnumerator.cs
- ProxyAttribute.cs
- DirtyTextRange.cs
- ToolStripDesignerUtils.cs
- Size.cs
- InputQueueChannelAcceptor.cs
- OdbcException.cs
- XmlParserContext.cs
- BitmapEffectInputData.cs
- AttachedPropertyMethodSelector.cs
- ConfigXmlWhitespace.cs
- CompiledXpathExpr.cs
- LinqDataSourceContextData.cs
- SafeMILHandle.cs
- GACMembershipCondition.cs
- ImplicitInputBrush.cs
- wgx_commands.cs
- MissingManifestResourceException.cs
- TimeSpanValidatorAttribute.cs
- WebPartZoneCollection.cs
- SvcMapFile.cs
- XNodeValidator.cs
- Random.cs
- Mapping.cs
- DefaultValueAttribute.cs
- WaitHandle.cs
- AssociatedControlConverter.cs
- CatalogPartCollection.cs
- Image.cs