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
- HtmlLink.cs
- SafeRightsManagementPubHandle.cs
- NameSpaceExtractor.cs
- EditBehavior.cs
- RealizationDrawingContextWalker.cs
- IdentityHolder.cs
- DebugController.cs
- HtmlInputButton.cs
- ConfigurationElementCollection.cs
- ServiceReference.cs
- CatalogPart.cs
- OptimisticConcurrencyException.cs
- PersonalizationDictionary.cs
- DataGridViewCheckBoxCell.cs
- DataServiceProviderWrapper.cs
- PublisherMembershipCondition.cs
- ContextMenuStripActionList.cs
- Model3D.cs
- DictionaryTraceRecord.cs
- SignedInfo.cs
- CodeFieldReferenceExpression.cs
- QueryableFilterRepeater.cs
- ComplexTypeEmitter.cs
- HtmlShimManager.cs
- WebPartCollection.cs
- DocumentSignatureManager.cs
- TableCell.cs
- ComboBoxRenderer.cs
- FixedTextPointer.cs
- GeometryCombineModeValidation.cs
- ModelUtilities.cs
- sqlcontext.cs
- QueryableFilterUserControl.cs
- ToolBarDesigner.cs
- Pair.cs
- DataGridTextBox.cs
- CallSiteHelpers.cs
- HttpSocketManager.cs
- SiteMapSection.cs
- DrawingContext.cs
- OperationCanceledException.cs
- ComponentEvent.cs
- SQLBytes.cs
- PathStreamGeometryContext.cs
- InvalidComObjectException.cs
- RequestContext.cs
- TreeBuilderXamlTranslator.cs
- SystemInfo.cs
- Axis.cs
- ReturnType.cs
- AnnotationObservableCollection.cs
- PlanCompiler.cs
- Light.cs
- MailWebEventProvider.cs
- MimeBasePart.cs
- MachinePropertyVariants.cs
- NotCondition.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- OleDbRowUpdatedEvent.cs
- RequestValidator.cs
- EventSetter.cs
- DataSetUtil.cs
- ConfigurationSectionGroup.cs
- ExtendedProperty.cs
- MultiPartWriter.cs
- RootBrowserWindow.cs
- SoapAttributes.cs
- WebScriptEndpoint.cs
- ValueConversionAttribute.cs
- Control.cs
- SelectionHighlightInfo.cs
- CharAnimationUsingKeyFrames.cs
- ClassGenerator.cs
- XmlCustomFormatter.cs
- LogFlushAsyncResult.cs
- RowToParametersTransformer.cs
- Helper.cs
- MsmqIntegrationProcessProtocolHandler.cs
- PartDesigner.cs
- Help.cs
- LogWriteRestartAreaState.cs
- ContourSegment.cs
- webeventbuffer.cs
- JobPageOrder.cs
- XmlIlGenerator.cs
- ViewStateModeByIdAttribute.cs
- DataGrid.cs
- Int16AnimationUsingKeyFrames.cs
- IntegerValidatorAttribute.cs
- WebBrowserDocumentCompletedEventHandler.cs
- LoginNameDesigner.cs
- SmiContext.cs
- InterleavedZipPartStream.cs
- Accessors.cs
- BitmapData.cs
- JpegBitmapEncoder.cs
- CodeSubDirectoriesCollection.cs
- EdmComplexPropertyAttribute.cs
- LayoutInformation.cs
- coordinatorfactory.cs