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
- XamlTreeBuilderBamlRecordWriter.cs
- Peer.cs
- SafeNativeMethodsCLR.cs
- TableCell.cs
- XmlEncodedRawTextWriter.cs
- SolidBrush.cs
- OracleDataAdapter.cs
- UserNameSecurityTokenProvider.cs
- TableLayoutPanelCodeDomSerializer.cs
- ScalarType.cs
- PropertyDescriptor.cs
- TypeUtil.cs
- MulticastOption.cs
- DataGridColumnHeadersPresenter.cs
- ColumnProvider.cs
- XmlAttributeAttribute.cs
- DeclarationUpdate.cs
- DataViewManagerListItemTypeDescriptor.cs
- FloatMinMaxAggregationOperator.cs
- AsyncOperationManager.cs
- GridView.cs
- Compilation.cs
- StringBuilder.cs
- ModifyActivitiesPropertyDescriptor.cs
- _RequestCacheProtocol.cs
- ToolBar.cs
- HttpProcessUtility.cs
- UnsafeMethods.cs
- DbgUtil.cs
- AQNBuilder.cs
- SqlLiftIndependentRowExpressions.cs
- IdnMapping.cs
- CqlParserHelpers.cs
- Win32MouseDevice.cs
- HandledEventArgs.cs
- HtmlInputImage.cs
- XamlInt32CollectionSerializer.cs
- DefaultObjectMappingItemCollection.cs
- MDIControlStrip.cs
- IdnElement.cs
- LinqDataSourceUpdateEventArgs.cs
- InternalSafeNativeMethods.cs
- TagElement.cs
- HwndSource.cs
- ThicknessAnimation.cs
- TemplateField.cs
- Pipe.cs
- HierarchicalDataSourceConverter.cs
- SqlException.cs
- AdCreatedEventArgs.cs
- ListDictionary.cs
- BinaryKeyIdentifierClause.cs
- BooleanSwitch.cs
- BinHexDecoder.cs
- ExceptionRoutedEventArgs.cs
- ReadOnlyHierarchicalDataSourceView.cs
- DataControlPagerLinkButton.cs
- SessionStateItemCollection.cs
- RuntimeArgumentHandle.cs
- ProfessionalColorTable.cs
- FixedPageProcessor.cs
- NetStream.cs
- DataGridViewUtilities.cs
- SoapReflectionImporter.cs
- Size.cs
- EffectiveValueEntry.cs
- Hash.cs
- Inflater.cs
- TargetException.cs
- StdValidatorsAndConverters.cs
- NumberEdit.cs
- XmlStreamStore.cs
- UnicastIPAddressInformationCollection.cs
- DrawingCollection.cs
- ArraySortHelper.cs
- ColumnMap.cs
- XmlSchemaSimpleTypeRestriction.cs
- XmlDataImplementation.cs
- ScrollBar.cs
- StylusPoint.cs
- StateBag.cs
- CopyAttributesAction.cs
- ObservableCollectionDefaultValueFactory.cs
- RelationshipConverter.cs
- WebControlsSection.cs
- DataServiceOperationContext.cs
- SkewTransform.cs
- PersistenceTypeAttribute.cs
- CommentAction.cs
- SplitterCancelEvent.cs
- CodeDirectiveCollection.cs
- MenuItemCollection.cs
- ContentElement.cs
- TypeUnloadedException.cs
- EntryPointNotFoundException.cs
- ItemsPanelTemplate.cs
- FileDialog.cs
- MessageContractImporter.cs
- SaveRecipientRequest.cs
- TextViewBase.cs