Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- StrokeFIndices.cs
- HtmlGenericControl.cs
- TextRenderer.cs
- PolicyLevel.cs
- DataSourceCacheDurationConverter.cs
- MetadataUtilsSmi.cs
- MsmqTransportSecurity.cs
- UrlPath.cs
- TagPrefixAttribute.cs
- UnsafeNativeMethods.cs
- ObjectQueryProvider.cs
- DataServiceResponse.cs
- SettingsBase.cs
- DrawItemEvent.cs
- EntitySetDataBindingList.cs
- AnnotationAuthorChangedEventArgs.cs
- DataViewSettingCollection.cs
- OdbcTransaction.cs
- DoWorkEventArgs.cs
- AccessibleObject.cs
- Int64.cs
- MethodImplAttribute.cs
- Descriptor.cs
- AccessorTable.cs
- WaitForChangedResult.cs
- TreeView.cs
- InputScopeAttribute.cs
- HttpServerChannel.cs
- AdRotator.cs
- BoolExpression.cs
- RoleGroupCollection.cs
- CqlBlock.cs
- Button.cs
- Duration.cs
- util.cs
- Geometry3D.cs
- XmlnsPrefixAttribute.cs
- ColumnBinding.cs
- PointLight.cs
- SchemaContext.cs
- ErrorWrapper.cs
- QilInvokeLateBound.cs
- ApplicationServiceHelper.cs
- XmlObjectSerializerReadContextComplex.cs
- ServicesExceptionNotHandledEventArgs.cs
- TimeSpanOrInfiniteConverter.cs
- CounterCreationData.cs
- StyleBamlTreeBuilder.cs
- XPathNode.cs
- DescendantQuery.cs
- DataGridViewComboBoxColumn.cs
- Int16KeyFrameCollection.cs
- KnownTypesHelper.cs
- SqlDeflator.cs
- SByteConverter.cs
- ReadWriteControlDesigner.cs
- GeneralTransform3DGroup.cs
- ExtendedPropertyDescriptor.cs
- TextSchema.cs
- RequestCachingSection.cs
- LazyLoadBehavior.cs
- SqlFileStream.cs
- XmlSchemaSubstitutionGroup.cs
- EventLogTraceListener.cs
- XmlMapping.cs
- TextTreeExtractElementUndoUnit.cs
- DbProviderFactory.cs
- InstanceKeyCompleteException.cs
- Version.cs
- ZoneButton.cs
- ImageField.cs
- PostBackOptions.cs
- FamilyMap.cs
- CodeLabeledStatement.cs
- DataGridCellClipboardEventArgs.cs
- SectionRecord.cs
- _BaseOverlappedAsyncResult.cs
- StringUtil.cs
- DataGrid.cs
- RotationValidation.cs
- XmlSchemaComplexType.cs
- Wizard.cs
- TextWriter.cs
- BindingsCollection.cs
- SessionIDManager.cs
- SweepDirectionValidation.cs
- StringValidatorAttribute.cs
- ApplicationProxyInternal.cs
- ActiveDocumentEvent.cs
- TextChange.cs
- SoapClientProtocol.cs
- JsonSerializer.cs
- EntityModelBuildProvider.cs
- DataBoundControlHelper.cs
- TimelineGroup.cs
- BaseAsyncResult.cs
- SoapMessage.cs
- DocumentViewerBase.cs
- KeyboardNavigation.cs
- TextFindEngine.cs