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
- ForeignKeyFactory.cs
- SymLanguageType.cs
- WebBrowserNavigatingEventHandler.cs
- HebrewNumber.cs
- ParameterElement.cs
- ToolStripControlHost.cs
- SourceCollection.cs
- ManagementEventArgs.cs
- DbgUtil.cs
- OdbcConnectionOpen.cs
- HashCryptoHandle.cs
- BamlStream.cs
- controlskin.cs
- DbSourceCommand.cs
- SystemFonts.cs
- GlyphsSerializer.cs
- SweepDirectionValidation.cs
- SQLBytes.cs
- CodeIndexerExpression.cs
- _SslSessionsCache.cs
- ProfileProvider.cs
- Point3DCollectionConverter.cs
- AttributeUsageAttribute.cs
- DelegatedStream.cs
- assemblycache.cs
- Button.cs
- KeyEvent.cs
- SmiGettersStream.cs
- altserialization.cs
- ButtonFieldBase.cs
- CustomCategoryAttribute.cs
- MultilineStringConverter.cs
- OperatorExpressions.cs
- PixelShader.cs
- EnumConverter.cs
- XPSSignatureDefinition.cs
- ArgumentOutOfRangeException.cs
- WebPartConnectionsCloseVerb.cs
- Opcode.cs
- ButtonChrome.cs
- MessageHeaderAttribute.cs
- DataGridViewCellMouseEventArgs.cs
- VirtualPathProvider.cs
- EnumValAlphaComparer.cs
- StructuralObject.cs
- StructuredTypeInfo.cs
- ApplicationInterop.cs
- ToolboxComponentsCreatedEventArgs.cs
- StdValidatorsAndConverters.cs
- SecurityUtils.cs
- LabelExpression.cs
- StreamInfo.cs
- BinaryExpression.cs
- SecurityPolicyVersion.cs
- X509WindowsSecurityToken.cs
- TypographyProperties.cs
- FormsAuthenticationUser.cs
- DataGridBoolColumn.cs
- ContentFileHelper.cs
- DefaultTraceListener.cs
- HttpCapabilitiesBase.cs
- LogFlushAsyncResult.cs
- StandardOleMarshalObject.cs
- GZipStream.cs
- RuntimeArgumentHandle.cs
- DeflateStream.cs
- PublisherMembershipCondition.cs
- BStrWrapper.cs
- OpenTypeLayoutCache.cs
- WebHttpSecurityElement.cs
- WaitHandleCannotBeOpenedException.cs
- XmlChoiceIdentifierAttribute.cs
- BindingsCollection.cs
- LinqDataSourceInsertEventArgs.cs
- CodeParameterDeclarationExpression.cs
- XmlSequenceWriter.cs
- Task.cs
- RuntimeCompatibilityAttribute.cs
- Base64Encoder.cs
- HealthMonitoringSectionHelper.cs
- SymbolDocumentGenerator.cs
- StaticTextPointer.cs
- Rect3D.cs
- FileUtil.cs
- LassoSelectionBehavior.cs
- SQLDateTime.cs
- parserscommon.cs
- HMACSHA1.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- NativeMethods.cs
- XamlClipboardData.cs
- UnsafeMethods.cs
- IListConverters.cs
- DataContext.cs
- Base64Encoder.cs
- EmitterCache.cs
- PropertyGridEditorPart.cs
- TcpStreams.cs
- IISMapPath.cs
- TreeView.cs