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
- Span.cs
- DateTimeValueSerializerContext.cs
- cache.cs
- TypedTableHandler.cs
- TraceSection.cs
- KeyPullup.cs
- SmtpFailedRecipientsException.cs
- DeleteIndexBinder.cs
- DataServiceRequestArgs.cs
- EncoderReplacementFallback.cs
- OracleDataReader.cs
- ToolStripPanelRow.cs
- BooleanExpr.cs
- NotFiniteNumberException.cs
- DelegateHelpers.Generated.cs
- ButtonChrome.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- RootContext.cs
- ToolStripContentPanelRenderEventArgs.cs
- CodeBinaryOperatorExpression.cs
- PointLight.cs
- ImageDrawing.cs
- CreateUserWizard.cs
- ArgumentValue.cs
- FixedBufferAttribute.cs
- PreservationFileWriter.cs
- StringUtil.cs
- DataGridViewEditingControlShowingEventArgs.cs
- PageHandlerFactory.cs
- CompositeCollection.cs
- XPathEmptyIterator.cs
- MergeFailedEvent.cs
- BitmapMetadataEnumerator.cs
- TextFormatterContext.cs
- CheckedListBox.cs
- Stroke2.cs
- PageVisual.cs
- EdmItemError.cs
- ToolStripGripRenderEventArgs.cs
- PrePrepareMethodAttribute.cs
- ImageAttributes.cs
- ContainerActivationHelper.cs
- FormsIdentity.cs
- UnsafeNativeMethods.cs
- WebBrowserPermission.cs
- WindowsComboBox.cs
- DataGridViewTextBoxColumn.cs
- BitmapEditor.cs
- XPathDocumentIterator.cs
- SpeechRecognitionEngine.cs
- DivideByZeroException.cs
- UserNameSecurityTokenProvider.cs
- SqlXml.cs
- TreeView.cs
- TreeViewDesigner.cs
- RsaSecurityTokenAuthenticator.cs
- IdentitySection.cs
- ReferenceConverter.cs
- MorphHelper.cs
- ProfileSettings.cs
- StickyNoteContentControl.cs
- XMLDiffLoader.cs
- Odbc32.cs
- NegationPusher.cs
- OutOfProcStateClientManager.cs
- RSAPKCS1KeyExchangeFormatter.cs
- ConfigXmlElement.cs
- FormViewDeletedEventArgs.cs
- LeftCellWrapper.cs
- HttpListenerContext.cs
- FillBehavior.cs
- SourceItem.cs
- WindowsListViewGroupHelper.cs
- ObjectPropertyMapping.cs
- IfJoinedCondition.cs
- HMACSHA256.cs
- DiscoveryVersion.cs
- OdbcPermission.cs
- WebBaseEventKeyComparer.cs
- InfocardClientCredentials.cs
- InvokeGenerator.cs
- CultureTable.cs
- DesignerAttribute.cs
- Math.cs
- TextOptionsInternal.cs
- ObjectItemAssemblyLoader.cs
- PopupControlService.cs
- Process.cs
- PrePrepareMethodAttribute.cs
- ResolveNextArgumentWorkItem.cs
- EntityDataSourceWrapper.cs
- ResourceDescriptionAttribute.cs
- TextTrailingWordEllipsis.cs
- StickyNoteHelper.cs
- HtmlShim.cs
- ArcSegment.cs
- Merger.cs
- TransformConverter.cs
- HybridWebProxyFinder.cs
- TypefaceCollection.cs