Code:
/ FX-1434 / FX-1434 / 1.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
- Pkcs7Signer.cs
- TextTreeRootNode.cs
- _AuthenticationState.cs
- RenderData.cs
- Pts.cs
- BridgeDataReader.cs
- PageThemeBuildProvider.cs
- processwaithandle.cs
- ObjectDataSourceMethodEventArgs.cs
- ClientClassGenerator.cs
- SafeFileMapViewHandle.cs
- AutoGeneratedField.cs
- SvcMapFileSerializer.cs
- Soap12FormatExtensions.cs
- StreamInfo.cs
- SEHException.cs
- DelegateBodyWriter.cs
- CornerRadiusConverter.cs
- IsolatedStorageFilePermission.cs
- ConnectionsZoneAutoFormat.cs
- mediaclock.cs
- SqlDataSourceFilteringEventArgs.cs
- Validator.cs
- TagNameToTypeMapper.cs
- VSWCFServiceContractGenerator.cs
- ViewgenGatekeeper.cs
- HttpModulesSection.cs
- WebUtility.cs
- Serialization.cs
- HMAC.cs
- UserUseLicenseDictionaryLoader.cs
- OdbcConnectionOpen.cs
- SiteMapHierarchicalDataSourceView.cs
- DrawingVisual.cs
- BitmapFrame.cs
- UrlMappingCollection.cs
- SystemIcmpV6Statistics.cs
- ShaderEffect.cs
- HGlobalSafeHandle.cs
- FocusTracker.cs
- UnsafeNativeMethodsMilCoreApi.cs
- XmlArrayAttribute.cs
- ServiceOperationInvoker.cs
- EntityDataSourceDesigner.cs
- EntityDataSourceConfigureObjectContext.cs
- RecognitionResult.cs
- DataGridViewCellValidatingEventArgs.cs
- EmissiveMaterial.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- TimeSpanConverter.cs
- UnsafeNativeMethods.cs
- StrokeIntersection.cs
- SqlClientMetaDataCollectionNames.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- ConcurrencyMode.cs
- ZoneIdentityPermission.cs
- HttpPostedFile.cs
- ListViewItem.cs
- CodeMemberEvent.cs
- Constraint.cs
- MimeBasePart.cs
- ColorTransform.cs
- ArraySegment.cs
- XPathMessageFilterElement.cs
- SourceFileBuildProvider.cs
- ToolTipAutomationPeer.cs
- DiscoveryVersionConverter.cs
- WithParamAction.cs
- SqlAliaser.cs
- EllipseGeometry.cs
- UnauthorizedAccessException.cs
- CatalogZone.cs
- XmlDataProvider.cs
- XmlSchemaSimpleContentExtension.cs
- BinaryFormatter.cs
- TreeViewEvent.cs
- ToolboxDataAttribute.cs
- Point.cs
- PartialCachingAttribute.cs
- MaterializeFromAtom.cs
- TypeExtensionConverter.cs
- XmlSchemaParticle.cs
- SqlServices.cs
- CounterSetInstanceCounterDataSet.cs
- DesignerActionListCollection.cs
- GridViewUpdatedEventArgs.cs
- ChildChangedEventArgs.cs
- InkPresenterAutomationPeer.cs
- ObjectReaderCompiler.cs
- ActivityMarkupSerializationProvider.cs
- InkCanvasSelectionAdorner.cs
- ClientFormsIdentity.cs
- DbDataAdapter.cs
- JournalEntryStack.cs
- ConstrainedDataObject.cs
- PrinterUnitConvert.cs
- ControlEvent.cs
- TextBoxLine.cs
- _CommandStream.cs
- CreateParams.cs