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
- AttachedPropertiesService.cs
- ApplicationHost.cs
- AnimatedTypeHelpers.cs
- EventData.cs
- RangeBase.cs
- SchemaManager.cs
- ImageSource.cs
- ConfigXmlWhitespace.cs
- WebReference.cs
- AndCondition.cs
- Models.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- SpanIndex.cs
- Primitive.cs
- ToolStripSettings.cs
- WebResponse.cs
- TransformDescriptor.cs
- CurrentChangedEventManager.cs
- CodeAccessSecurityEngine.cs
- UriSectionReader.cs
- WindowPattern.cs
- ColumnCollection.cs
- ProfilePropertySettingsCollection.cs
- CoreSwitches.cs
- AtomMaterializer.cs
- ExceptionRoutedEventArgs.cs
- ListParaClient.cs
- XmlSchemaInfo.cs
- BamlBinaryReader.cs
- WebBaseEventKeyComparer.cs
- KeyFrames.cs
- WaitHandleCannotBeOpenedException.cs
- LogoValidationException.cs
- MappingModelBuildProvider.cs
- SiteMapDataSource.cs
- SchemaCollectionCompiler.cs
- SQLStringStorage.cs
- ContentWrapperAttribute.cs
- SurrogateEncoder.cs
- SapiGrammar.cs
- SendMessageContent.cs
- DataBoundControlParameterTarget.cs
- AdornerHitTestResult.cs
- TableLayoutCellPaintEventArgs.cs
- PropertyGroupDescription.cs
- GeometryModel3D.cs
- RecognizedAudio.cs
- ObjectConverter.cs
- QuaternionAnimation.cs
- SectionVisual.cs
- MasterPageBuildProvider.cs
- DesignTimeDataBinding.cs
- ListItem.cs
- ReflectionTypeLoadException.cs
- SqlServer2KCompatibilityCheck.cs
- StyleSheetComponentEditor.cs
- Drawing.cs
- StateMachine.cs
- CustomError.cs
- CreateUserWizard.cs
- ActivityInstanceReference.cs
- DLinqTableProvider.cs
- InputEventArgs.cs
- KeyGestureValueSerializer.cs
- ConfigPathUtility.cs
- ConnectionPoolManager.cs
- DebugTraceHelper.cs
- ResolveMatchesApril2005.cs
- SapiRecoContext.cs
- PolyLineSegment.cs
- ObjectQuery.cs
- MultiSelectRootGridEntry.cs
- ToolboxComponentsCreatedEventArgs.cs
- rsa.cs
- DrawingState.cs
- ComboBoxDesigner.cs
- CodeTryCatchFinallyStatement.cs
- ReturnEventArgs.cs
- PenCursorManager.cs
- PropertyEmitter.cs
- DataListCommandEventArgs.cs
- ResolveResponseInfo.cs
- DataSourceExpressionCollection.cs
- HwndHost.cs
- ArgIterator.cs
- UnauthorizedAccessException.cs
- Path.cs
- Brushes.cs
- SurrogateSelector.cs
- SmiEventStream.cs
- AesManaged.cs
- DispatcherEventArgs.cs
- SiblingIterators.cs
- LicenseManager.cs
- TableLayoutPanelResizeGlyph.cs
- ScriptControlManager.cs
- MemoryStream.cs
- AsyncCodeActivity.cs
- SimpleWorkerRequest.cs
- BinHexEncoder.cs