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
- IncomingWebResponseContext.cs
- MulticastNotSupportedException.cs
- ButtonFlatAdapter.cs
- XmlUtil.cs
- NameValueSectionHandler.cs
- CustomBinding.cs
- XPathDocumentIterator.cs
- SetStateEventArgs.cs
- StringAnimationUsingKeyFrames.cs
- WebPart.cs
- AssemblyNameProxy.cs
- CombinedGeometry.cs
- TextBoxRenderer.cs
- FormattedTextSymbols.cs
- DPTypeDescriptorContext.cs
- AsmxEndpointPickerExtension.cs
- NativeMethods.cs
- HttpStreamMessage.cs
- ScrollBarAutomationPeer.cs
- CircleHotSpot.cs
- DefaultPrintController.cs
- StorageComplexPropertyMapping.cs
- UidPropertyAttribute.cs
- RegexGroupCollection.cs
- WebHttpBindingCollectionElement.cs
- XhtmlTextWriter.cs
- XPathAncestorQuery.cs
- CatalogPartChrome.cs
- RemoveStoryboard.cs
- WebPermission.cs
- PropertyManager.cs
- XmlLinkedNode.cs
- SectionVisual.cs
- NamespaceCollection.cs
- OSFeature.cs
- ISAPIRuntime.cs
- FunctionImportMapping.cs
- DataMemberFieldConverter.cs
- Point3DCollectionValueSerializer.cs
- HtmlSelect.cs
- ManifestResourceInfo.cs
- unsafeIndexingFilterStream.cs
- XmlSchemaAll.cs
- RequiredAttributeAttribute.cs
- CopyOnWriteList.cs
- BooleanExpr.cs
- MimeTypeMapper.cs
- WindowsIdentity.cs
- ListMarkerLine.cs
- TranslateTransform3D.cs
- ListManagerBindingsCollection.cs
- BaseCollection.cs
- MinimizableAttributeTypeConverter.cs
- ObjectDataSourceDesigner.cs
- Variable.cs
- XamlSerializerUtil.cs
- GeneralTransformGroup.cs
- SamlDelegatingWriter.cs
- ToolStripStatusLabel.cs
- WebBrowserPermission.cs
- SMSvcHost.cs
- CancellableEnumerable.cs
- TextLineResult.cs
- RoleBoolean.cs
- UriParserTemplates.cs
- OleDbReferenceCollection.cs
- FileDialog.cs
- ToolStripItemCollection.cs
- ReversePositionQuery.cs
- AvTrace.cs
- ErrorFormatterPage.cs
- SessionStateSection.cs
- ResourceDisplayNameAttribute.cs
- ToolTip.cs
- CultureInfoConverter.cs
- SelectionEditor.cs
- RegionData.cs
- DispatcherProcessingDisabled.cs
- StateDesigner.Layouts.cs
- BinaryParser.cs
- HttpStaticObjectsCollectionWrapper.cs
- ButtonBaseAutomationPeer.cs
- InstanceData.cs
- KnownBoxes.cs
- Overlapped.cs
- NetNamedPipeBindingCollectionElement.cs
- DataGridHelper.cs
- DbProviderFactory.cs
- PasswordDeriveBytes.cs
- SerializationAttributes.cs
- ConfigurationSettings.cs
- EntityParameterCollection.cs
- Tablet.cs
- CuspData.cs
- BodyGlyph.cs
- Merger.cs
- TagMapCollection.cs
- ConsoleKeyInfo.cs
- ColorTranslator.cs
- PerformanceCounterPermissionEntry.cs