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
- DBDataPermission.cs
- Identifier.cs
- AttachedPropertyMethodSelector.cs
- pingexception.cs
- DecimalMinMaxAggregationOperator.cs
- KeySpline.cs
- LassoHelper.cs
- SpStreamWrapper.cs
- OdbcPermission.cs
- SiteMapSection.cs
- TailCallAnalyzer.cs
- ToolStripCollectionEditor.cs
- TemplateBindingExpressionConverter.cs
- Parser.cs
- DashStyle.cs
- AssemblyUtil.cs
- OperationExecutionFault.cs
- GifBitmapDecoder.cs
- XmlSchemaCompilationSettings.cs
- KeyManager.cs
- EntityCommand.cs
- EventSourceCreationData.cs
- DataReaderContainer.cs
- DataSourceSelectArguments.cs
- altserialization.cs
- DeviceContext2.cs
- DoubleAnimationBase.cs
- SelectedDatesCollection.cs
- BatchParser.cs
- MenuCommandService.cs
- TextEncodedRawTextWriter.cs
- Shape.cs
- NamespaceTable.cs
- SatelliteContractVersionAttribute.cs
- Base64WriteStateInfo.cs
- EventLogInformation.cs
- WindowsScroll.cs
- Unit.cs
- Variant.cs
- ContentHostHelper.cs
- BaseCodeDomTreeGenerator.cs
- DataGridViewRowHeaderCell.cs
- PersistencePipeline.cs
- ValidationRule.cs
- TextProviderWrapper.cs
- XmlElementElementCollection.cs
- DesignerCommandSet.cs
- NumericUpDownAcceleration.cs
- SweepDirectionValidation.cs
- PropertyHelper.cs
- ValidatedControlConverter.cs
- Visual3D.cs
- ExtensibleClassFactory.cs
- Win32Native.cs
- TranslateTransform3D.cs
- XhtmlCssHandler.cs
- CurrentTimeZone.cs
- BufferedMessageWriter.cs
- _HelperAsyncResults.cs
- TreeViewEvent.cs
- EmptyQuery.cs
- BaseTemplateParser.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- MimeAnyImporter.cs
- RegisteredHiddenField.cs
- OverflowException.cs
- ThreadInterruptedException.cs
- basevalidator.cs
- ViewStateModeByIdAttribute.cs
- DifferencingCollection.cs
- WorkflowInstance.cs
- OrderablePartitioner.cs
- IPHostEntry.cs
- DelimitedListTraceListener.cs
- TextLine.cs
- ControllableStoryboardAction.cs
- CollectionsUtil.cs
- VisualBrush.cs
- InputScope.cs
- UInt32.cs
- ExpressionEditorAttribute.cs
- DataTemplateSelector.cs
- DataGridViewComboBoxEditingControl.cs
- SessionChannels.cs
- MaskDesignerDialog.cs
- RegistryPermission.cs
- EventDescriptor.cs
- ObjectReaderCompiler.cs
- PlanCompiler.cs
- TreeNode.cs
- CodeGotoStatement.cs
- MenuBase.cs
- Axis.cs
- Clause.cs
- PartialCachingAttribute.cs
- AutoGeneratedFieldProperties.cs
- CredentialCache.cs
- CompositionAdorner.cs
- CroppedBitmap.cs
- CertificateManager.cs