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
- ImpersonationContext.cs
- MappingSource.cs
- Globals.cs
- BasicExpressionVisitor.cs
- SessionStateUtil.cs
- Rect.cs
- DataGridViewColumnConverter.cs
- TemplateFactory.cs
- SortQuery.cs
- StyleSheet.cs
- OptionUsage.cs
- ExpressionPrinter.cs
- MetadataPropertyvalue.cs
- SyndicationElementExtension.cs
- Literal.cs
- NetSectionGroup.cs
- SQLMembershipProvider.cs
- _FtpDataStream.cs
- DetailsViewModeEventArgs.cs
- SessionPageStatePersister.cs
- FileNameEditor.cs
- PathStreamGeometryContext.cs
- ProviderMetadata.cs
- TimeSpanConverter.cs
- DbDataAdapter.cs
- SchemaImporterExtensionElement.cs
- SqlBuffer.cs
- InputProcessorProfiles.cs
- UInt32.cs
- SelectedDatesCollection.cs
- HttpWebRequestElement.cs
- IssuedTokenParametersElement.cs
- ManipulationVelocities.cs
- CultureInfo.cs
- ToolStripDropDownClosingEventArgs.cs
- CodeTypeDeclarationCollection.cs
- WebPartUtil.cs
- PublishLicense.cs
- TypefaceCollection.cs
- LogStream.cs
- StringReader.cs
- PersonalizationStateInfo.cs
- CatalogPart.cs
- OrElse.cs
- Item.cs
- TreeNodeCollectionEditor.cs
- UnsafeNativeMethodsCLR.cs
- HtmlTableRowCollection.cs
- DocumentOrderQuery.cs
- BrowserDefinitionCollection.cs
- ProxyFragment.cs
- ContextProperty.cs
- GroupBox.cs
- XPathCompileException.cs
- arabicshape.cs
- HtmlDocument.cs
- RedBlackList.cs
- ControlCodeDomSerializer.cs
- InvokePattern.cs
- MarshalByRefObject.cs
- _BufferOffsetSize.cs
- ExpressionBuilder.cs
- PropertyDescriptor.cs
- VSWCFServiceContractGenerator.cs
- DisplayNameAttribute.cs
- DeleteBookmarkScope.cs
- OutputCacheSettings.cs
- OdbcDataReader.cs
- CodeRegionDirective.cs
- WindowsPrincipal.cs
- AppSettingsReader.cs
- XmlAutoDetectWriter.cs
- Type.cs
- Debug.cs
- EventHandlersStore.cs
- ProtectedConfiguration.cs
- Point3D.cs
- IEnumerable.cs
- ConstructorExpr.cs
- DetailsViewInsertedEventArgs.cs
- EventSourceCreationData.cs
- _OSSOCK.cs
- StateInitialization.cs
- IgnoreDeviceFilterElementCollection.cs
- ConstraintCollection.cs
- CrossSiteScriptingValidation.cs
- TdsParserSessionPool.cs
- HttpHandlersInstallComponent.cs
- ModelPropertyDescriptor.cs
- SemanticAnalyzer.cs
- RegistryDataKey.cs
- XamlSerializer.cs
- TransactionWaitAsyncResult.cs
- WebPartHelpVerb.cs
- WebControlsSection.cs
- CodeSnippetCompileUnit.cs
- PrimaryKeyTypeConverter.cs
- PowerEase.cs
- Solver.cs
- BehaviorService.cs