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
- IntSecurity.cs
- SqlVersion.cs
- TextEditorCopyPaste.cs
- DataGridViewCellParsingEventArgs.cs
- SqlDependencyUtils.cs
- DataAccessor.cs
- Span.cs
- LinearQuaternionKeyFrame.cs
- TimeoutValidationAttribute.cs
- ImpersonateTokenRef.cs
- precedingsibling.cs
- IDispatchConstantAttribute.cs
- PrivilegedConfigurationManager.cs
- Nullable.cs
- SystemIPv6InterfaceProperties.cs
- HtmlHead.cs
- XamlSerializer.cs
- sqlinternaltransaction.cs
- ParameterModifier.cs
- CodePrimitiveExpression.cs
- Model3D.cs
- MailAddressCollection.cs
- SimplePropertyEntry.cs
- ProjectionPlan.cs
- EntitySetBase.cs
- XmlComplianceUtil.cs
- HtmlInputRadioButton.cs
- X509ChainPolicy.cs
- WorkflowMessageEventHandler.cs
- UInt16Converter.cs
- _AutoWebProxyScriptHelper.cs
- TextureBrush.cs
- EncoderReplacementFallback.cs
- HttpSessionStateBase.cs
- TraceRecord.cs
- HttpPostClientProtocol.cs
- UserPreferenceChangingEventArgs.cs
- SqlExpander.cs
- SafeCryptoHandles.cs
- DateTimeConstantAttribute.cs
- ComponentResourceManager.cs
- COM2PropertyDescriptor.cs
- SchemaImporterExtensionsSection.cs
- DeviceOverridableAttribute.cs
- ConditionCollection.cs
- SqlTypeSystemProvider.cs
- DecoderReplacementFallback.cs
- ColorInterpolationModeValidation.cs
- Rijndael.cs
- EncryptedPackage.cs
- DataColumn.cs
- UnmanagedMemoryStreamWrapper.cs
- EventBuilder.cs
- OdbcTransaction.cs
- DefaultWorkflowTransactionService.cs
- Rect3D.cs
- WmpBitmapDecoder.cs
- SqlConnectionPoolProviderInfo.cs
- SqlTransaction.cs
- SchemaImporter.cs
- CoTaskMemUnicodeSafeHandle.cs
- ItemList.cs
- _SslSessionsCache.cs
- ToolStripSystemRenderer.cs
- ExpressionEditorAttribute.cs
- JsonCollectionDataContract.cs
- EventManager.cs
- ExpressionBuilderCollection.cs
- ToolStripOverflowButton.cs
- PointCollectionConverter.cs
- Attribute.cs
- PresentationSource.cs
- MenuItem.cs
- Propagator.JoinPropagator.cs
- WebPartEventArgs.cs
- RemotingServices.cs
- ForEachAction.cs
- XmlBaseWriter.cs
- BufferAllocator.cs
- DataBoundControlHelper.cs
- TypeKeyValue.cs
- ViewStateException.cs
- FactoryMaker.cs
- GuidTagList.cs
- MenuItemBinding.cs
- GenericXmlSecurityTokenAuthenticator.cs
- FileRegion.cs
- Enum.cs
- AmbientLight.cs
- TypeUtil.cs
- HostSecurityManager.cs
- DocumentXmlWriter.cs
- DropSource.cs
- SettingsSection.cs
- StartUpEventArgs.cs
- _ChunkParse.cs
- unsafeIndexingFilterStream.cs
- ReachPageContentSerializer.cs
- ReachUIElementCollectionSerializerAsync.cs
- OperatorExpressions.cs