Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KnownTypeAttribute.cs
- WindowsFormsHost.cs
- ToolboxItemCollection.cs
- ExpressionVisitor.cs
- KnownBoxes.cs
- DataGridViewLayoutData.cs
- XmlHierarchyData.cs
- AuthenticateEventArgs.cs
- SamlAttributeStatement.cs
- CellParagraph.cs
- FileLoadException.cs
- LocalIdKeyIdentifierClause.cs
- CounterCreationData.cs
- StringValidatorAttribute.cs
- GridViewRowPresenterBase.cs
- ConfigurationSectionCollection.cs
- CancellableEnumerable.cs
- SecurityException.cs
- InputReportEventArgs.cs
- SecurityTokenParametersEnumerable.cs
- HwndHostAutomationPeer.cs
- WebEventCodes.cs
- BooleanToVisibilityConverter.cs
- LinkButton.cs
- CodeChecksumPragma.cs
- storepermission.cs
- TextRunCacheImp.cs
- SafeRightsManagementQueryHandle.cs
- RectangleHotSpot.cs
- OrderByBuilder.cs
- AsymmetricKeyExchangeFormatter.cs
- DataExpression.cs
- GorillaCodec.cs
- TimeManager.cs
- PaperSource.cs
- Transform3DCollection.cs
- WorkItem.cs
- EncodingStreamWrapper.cs
- Transactions.cs
- XmlSchemaGroup.cs
- Int64Storage.cs
- EFTableProvider.cs
- AttachedPropertyBrowsableAttribute.cs
- PriorityBindingExpression.cs
- HtmlInputSubmit.cs
- ProfileBuildProvider.cs
- C14NUtil.cs
- Vector.cs
- AppDomainProtocolHandler.cs
- AuthenticationException.cs
- HwndHost.cs
- LocalFileSettingsProvider.cs
- ObjectResult.cs
- DataColumn.cs
- GetPageCompletedEventArgs.cs
- HashAlgorithm.cs
- WebDisplayNameAttribute.cs
- Rijndael.cs
- DispatchWrapper.cs
- ArrayList.cs
- RightsManagementLicense.cs
- ComponentCommands.cs
- VerticalAlignConverter.cs
- RootBrowserWindow.cs
- RegexRunner.cs
- RegexMatch.cs
- TextEndOfSegment.cs
- RowToFieldTransformer.cs
- InputReferenceExpression.cs
- StandardToolWindows.cs
- ButtonChrome.cs
- StringDictionary.cs
- XmlWhitespace.cs
- DataGridHelper.cs
- CryptographicAttribute.cs
- Parallel.cs
- DetailsViewCommandEventArgs.cs
- ValidationErrorCollection.cs
- RequiredFieldValidator.cs
- EndPoint.cs
- RSAOAEPKeyExchangeDeformatter.cs
- X509SecurityTokenAuthenticator.cs
- DataServiceConfiguration.cs
- HtmlControlAdapter.cs
- HeaderCollection.cs
- EnumMember.cs
- AppDomainFactory.cs
- ISCIIEncoding.cs
- DataControlFieldCollection.cs
- FixedPageStructure.cs
- SqlUserDefinedTypeAttribute.cs
- ObjectHelper.cs
- NameValueCollection.cs
- TimeZoneInfo.cs
- XsdBuildProvider.cs
- ReaderWriterLockWrapper.cs
- DynamicQueryableWrapper.cs
- DisplayInformation.cs
- PermissionRequestEvidence.cs
- PackagePart.cs