Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PrintDialog.cs
- ClientUrlResolverWrapper.cs
- ServiceModelConfigurationSectionGroup.cs
- BindingEditor.xaml.cs
- DecoratedNameAttribute.cs
- ResourceKey.cs
- TreeNodeStyle.cs
- SmiXetterAccessMap.cs
- ColorConverter.cs
- ValuePattern.cs
- AssemblyResourceLoader.cs
- VirtualDirectoryMappingCollection.cs
- OutputBuffer.cs
- CompareValidator.cs
- Label.cs
- dtdvalidator.cs
- Adorner.cs
- DataGridViewImageCell.cs
- ZipIOLocalFileDataDescriptor.cs
- ConfigXmlCDataSection.cs
- DateTimeConverter.cs
- FlowPosition.cs
- ProgressPage.cs
- IriParsingElement.cs
- IconEditor.cs
- HttpChannelHelper.cs
- WebControlParameterProxy.cs
- NoResizeHandleGlyph.cs
- ExpressionBuilderCollection.cs
- UserControl.cs
- DataGridSortCommandEventArgs.cs
- SchemaAttDef.cs
- XmlSchemaSet.cs
- DataBindingCollection.cs
- WebPartDisplayModeEventArgs.cs
- ServiceOperationHelpers.cs
- IFlowDocumentViewer.cs
- UpdatableWrapper.cs
- DataList.cs
- WindowsRebar.cs
- EntityDesignerUtils.cs
- RequestCache.cs
- SolidColorBrush.cs
- PhysicalAddress.cs
- BaseCollection.cs
- SqlGenerator.cs
- SQLInt32Storage.cs
- SpellerError.cs
- IDQuery.cs
- ObjectAnimationBase.cs
- XsdCachingReader.cs
- EdgeModeValidation.cs
- CryptoApi.cs
- SimpleParser.cs
- SourceChangedEventArgs.cs
- IndexedEnumerable.cs
- X500Name.cs
- DecimalConstantAttribute.cs
- ToolStripOverflowButton.cs
- StateManagedCollection.cs
- FontFaceLayoutInfo.cs
- OleDragDropHandler.cs
- RadioButtonFlatAdapter.cs
- SystemSounds.cs
- StrongNameKeyPair.cs
- NativeMethodsOther.cs
- InvalidDataContractException.cs
- DataGridViewCellStyleEditor.cs
- TableCell.cs
- IERequestCache.cs
- MissingMethodException.cs
- ScaleTransform.cs
- XPathScanner.cs
- HttpListenerException.cs
- BlobPersonalizationState.cs
- TextWriter.cs
- XmlCharacterData.cs
- DocumentReferenceCollection.cs
- XamlReader.cs
- SequentialUshortCollection.cs
- Ray3DHitTestResult.cs
- MessageFilterTable.cs
- Win32SafeHandles.cs
- SqlConnectionHelper.cs
- CodeCatchClauseCollection.cs
- CollectionViewGroup.cs
- DetailsView.cs
- DateTimeSerializationSection.cs
- DataGridViewRowEventArgs.cs
- SecureStringHasher.cs
- ToggleButtonAutomationPeer.cs
- NameValueFileSectionHandler.cs
- BinaryObjectWriter.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- GPRECTF.cs
- SourceFileBuildProvider.cs
- ConfigXmlWhitespace.cs
- TextPatternIdentifiers.cs
- Geometry.cs
- Transform3DGroup.cs