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
- LineMetrics.cs
- EdmToObjectNamespaceMap.cs
- BamlRecordReader.cs
- SmiRequestExecutor.cs
- LiteralControl.cs
- SharedDp.cs
- LambdaReference.cs
- NumericUpDown.cs
- SettingsPropertyIsReadOnlyException.cs
- FloaterParagraph.cs
- XamlPathDataSerializer.cs
- TrackingProfileDeserializationException.cs
- RuntimeUtils.cs
- ValuePatternIdentifiers.cs
- TextSegment.cs
- DefaultTextStore.cs
- MouseActionConverter.cs
- ConnectionConsumerAttribute.cs
- ComplexPropertyEntry.cs
- WindowsSpinner.cs
- MonthCalendar.cs
- SiteMapProvider.cs
- PaginationProgressEventArgs.cs
- ReversePositionQuery.cs
- CapabilitiesUse.cs
- DefaultAssemblyResolver.cs
- HtmlInputControl.cs
- ControllableStoryboardAction.cs
- CollectionEditVerbManager.cs
- TimelineCollection.cs
- DataContractSerializerOperationFormatter.cs
- Hashtable.cs
- DesignerActionItem.cs
- WinFormsComponentEditor.cs
- Size3DConverter.cs
- ImportRequest.cs
- DependencyPropertyDescriptor.cs
- Rfc2898DeriveBytes.cs
- PropertyGeneratedEventArgs.cs
- BuilderElements.cs
- Sql8ConformanceChecker.cs
- ASCIIEncoding.cs
- comcontractssection.cs
- EdmType.cs
- SmtpReplyReaderFactory.cs
- DateTimePickerDesigner.cs
- ApplicationGesture.cs
- MembershipUser.cs
- TypedRowGenerator.cs
- EpmCustomContentWriterNodeData.cs
- ValidationSummary.cs
- RepeatInfo.cs
- TemplateControl.cs
- PassportAuthentication.cs
- QueryMatcher.cs
- SubMenuStyle.cs
- StylesEditorDialog.cs
- EntityDataSourceSelectingEventArgs.cs
- MeasureItemEvent.cs
- EntityContainer.cs
- UrlMappingsModule.cs
- DocumentPage.cs
- ZipIOExtraFieldElement.cs
- DataSourceUtil.cs
- ZipFileInfo.cs
- QuaternionAnimation.cs
- TableStyle.cs
- EventDescriptorCollection.cs
- CompositeControl.cs
- RadioButtonAutomationPeer.cs
- WebPartCatalogCloseVerb.cs
- BamlLocalizableResourceKey.cs
- Privilege.cs
- MimeParameter.cs
- StateMachineSubscriptionManager.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- XmlSchemaInclude.cs
- MemberRelationshipService.cs
- httpapplicationstate.cs
- OleDbRowUpdatedEvent.cs
- TouchDevice.cs
- Rect3D.cs
- InkSerializer.cs
- EntityClientCacheKey.cs
- InternalEnumValidator.cs
- WindowsSysHeader.cs
- ConstraintManager.cs
- DataGridCell.cs
- SizeConverter.cs
- AssemblyCache.cs
- _HelperAsyncResults.cs
- StoreConnection.cs
- HttpFormatExtensions.cs
- UserControlCodeDomTreeGenerator.cs
- Aggregates.cs
- ObjectListCommandEventArgs.cs
- FieldInfo.cs
- WithStatement.cs
- ArgIterator.cs
- SchemaInfo.cs