Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- UniqueIdentifierService.cs
- Switch.cs
- ListViewDesigner.cs
- OLEDB_Enum.cs
- AttachmentService.cs
- _FixedSizeReader.cs
- ToolboxItem.cs
- InstanceOwner.cs
- ActivityXamlServices.cs
- FillRuleValidation.cs
- TableDetailsRow.cs
- ErrorHandler.cs
- shaperfactory.cs
- EntityTransaction.cs
- OleDbTransaction.cs
- ServicePointManager.cs
- FactoryGenerator.cs
- PrimitiveOperationFormatter.cs
- ObjectDataSource.cs
- CompositeScriptReferenceEventArgs.cs
- TextSchema.cs
- Point4D.cs
- DesignerLinkAdapter.cs
- RC2CryptoServiceProvider.cs
- StatusBarPanelClickEvent.cs
- MulticastOption.cs
- CatalogZoneBase.cs
- TemplateControl.cs
- QilPatternVisitor.cs
- StylusSystemGestureEventArgs.cs
- DocumentAutomationPeer.cs
- NaturalLanguageHyphenator.cs
- DataRowExtensions.cs
- XmlArrayItemAttributes.cs
- PartialCachingAttribute.cs
- ServicePointManagerElement.cs
- ContainerAction.cs
- AuthenticationService.cs
- RangeBase.cs
- TemplateBaseAction.cs
- AssemblyAssociatedContentFileAttribute.cs
- Base64Encoder.cs
- CqlGenerator.cs
- ParameterElement.cs
- Drawing.cs
- ApplicationFileCodeDomTreeGenerator.cs
- Dynamic.cs
- PropertyPath.cs
- ControlCachePolicy.cs
- PathFigureCollection.cs
- InvalidStoreProtectionKeyException.cs
- RemoteWebConfigurationHostServer.cs
- UIElementCollection.cs
- SettingsAttributes.cs
- DtcInterfaces.cs
- ToolStripSplitStackLayout.cs
- DataReceivedEventArgs.cs
- Header.cs
- HttpCachePolicyElement.cs
- FocusWithinProperty.cs
- JsonByteArrayDataContract.cs
- TTSEvent.cs
- CodeSubDirectory.cs
- PictureBox.cs
- CreateSequenceResponse.cs
- MDIClient.cs
- SvcFileManager.cs
- OpenTypeLayout.cs
- JsonDataContract.cs
- BinHexDecoder.cs
- TextParagraphView.cs
- XmlILConstructAnalyzer.cs
- TextPenaltyModule.cs
- MatrixAnimationUsingKeyFrames.cs
- XmlSchemaSimpleContent.cs
- PrintDocument.cs
- ChangeToolStripParentVerb.cs
- TableDetailsCollection.cs
- FontClient.cs
- ToolStripEditorManager.cs
- FileClassifier.cs
- SystemBrushes.cs
- ExpressionBuilderCollection.cs
- Metadata.cs
- MatrixConverter.cs
- HttpException.cs
- login.cs
- AsyncPostBackTrigger.cs
- Pts.cs
- DatagridviewDisplayedBandsData.cs
- PagesSection.cs
- BinaryObjectInfo.cs
- SpnEndpointIdentity.cs
- CachingParameterInspector.cs
- PermissionAttributes.cs
- WebPartManagerDesigner.cs
- ViewManager.cs
- UnicodeEncoding.cs
- ReceiveReply.cs
- SiteMapHierarchicalDataSourceView.cs