Code:
/ DotNET / DotNET / 8.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
- WebPartTransformer.cs
- SqlCacheDependencyDatabase.cs
- XPathNodeInfoAtom.cs
- ComPlusThreadInitializer.cs
- SignatureResourcePool.cs
- DataGridViewRowHeaderCell.cs
- MatrixAnimationUsingPath.cs
- userdatakeys.cs
- InvokeHandlers.cs
- SelectionService.cs
- TempFiles.cs
- CodeCommentStatementCollection.cs
- __Error.cs
- RegexMatch.cs
- Pair.cs
- RightsManagementUser.cs
- CompareValidator.cs
- ClientRoleProvider.cs
- SessionPageStateSection.cs
- AppDomainGrammarProxy.cs
- FormViewPagerRow.cs
- BindUriHelper.cs
- RegexTypeEditor.cs
- SvcMapFile.cs
- ScaleTransform3D.cs
- PageParser.cs
- NameValueFileSectionHandler.cs
- DataKey.cs
- SID.cs
- XmlSchemaFacet.cs
- Expression.cs
- AmbientLight.cs
- ImportedNamespaceContextItem.cs
- PriorityQueue.cs
- ServiceNotStartedException.cs
- SqlDeflator.cs
- ContainsRowNumberChecker.cs
- CodeTypeOfExpression.cs
- ClaimSet.cs
- ListViewAutomationPeer.cs
- InstanceCreationEditor.cs
- SqlDataSourceFilteringEventArgs.cs
- XPathNodeList.cs
- GeometryDrawing.cs
- elementinformation.cs
- WsdlInspector.cs
- XslException.cs
- GcSettings.cs
- DebugHandleTracker.cs
- ExtensionSimplifierMarkupObject.cs
- DefaultValueTypeConverter.cs
- SchemaTableOptionalColumn.cs
- ClientBase.cs
- ProfileGroupSettings.cs
- MeasureData.cs
- CqlQuery.cs
- XmlSchemaDatatype.cs
- ObjectSerializerFactory.cs
- DataListCommandEventArgs.cs
- LocalsItemDescription.cs
- ColorAnimationUsingKeyFrames.cs
- QilReplaceVisitor.cs
- HwndProxyElementProvider.cs
- BaseCodeDomTreeGenerator.cs
- XslCompiledTransform.cs
- BindingContext.cs
- webbrowsersite.cs
- ThreadExceptionDialog.cs
- SizeChangedEventArgs.cs
- SqlHelper.cs
- GraphicsPathIterator.cs
- ConfigXmlComment.cs
- EntityDataSourceDesignerHelper.cs
- PropertyExpression.cs
- GenerateHelper.cs
- xmlsaver.cs
- TextServicesLoader.cs
- GregorianCalendar.cs
- RuntimeHelpers.cs
- XslTransform.cs
- Version.cs
- SecurityTokenParameters.cs
- HostingEnvironment.cs
- SoapExtensionImporter.cs
- GlyphRunDrawing.cs
- GlobalItem.cs
- StreamInfo.cs
- ReservationCollection.cs
- NotifyParentPropertyAttribute.cs
- XmlSchemaNotation.cs
- CachingHintValidation.cs
- NotifyCollectionChangedEventArgs.cs
- HostingPreferredMapPath.cs
- TypeUtil.cs
- MetadataFile.cs
- ShimAsPublicXamlType.cs
- DataView.cs
- _SslState.cs
- Crc32.cs
- XslAst.cs