Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- DataControlReferenceCollection.cs
- AssertFilter.cs
- SafeCertificateStore.cs
- CheckBoxField.cs
- CodeTypeOfExpression.cs
- XmlSchemaProviderAttribute.cs
- RSAProtectedConfigurationProvider.cs
- ObjectDataSourceSelectingEventArgs.cs
- HtmlTernaryTree.cs
- MetadataWorkspace.cs
- EntryPointNotFoundException.cs
- Thumb.cs
- XpsResource.cs
- ConnectionStringsExpressionBuilder.cs
- GregorianCalendar.cs
- DataGridViewColumnConverter.cs
- RawMouseInputReport.cs
- ReversePositionQuery.cs
- entityreference_tresulttype.cs
- AdvancedBindingEditor.cs
- RangeContentEnumerator.cs
- RegexWriter.cs
- TemplateComponentConnector.cs
- IHttpResponseInternal.cs
- DataGridItem.cs
- DataViewListener.cs
- XPathCompileException.cs
- UIHelper.cs
- SqlMethodCallConverter.cs
- VisualBrush.cs
- DataListItemCollection.cs
- BuildProviderCollection.cs
- DigitShape.cs
- SByte.cs
- TextFormatterHost.cs
- DbUpdateCommandTree.cs
- COM2ColorConverter.cs
- DataControlCommands.cs
- ExtenderControl.cs
- InputMethod.cs
- UTF32Encoding.cs
- formatstringdialog.cs
- SocketInformation.cs
- PropertyTab.cs
- ApplicationSettingsBase.cs
- BitmapEffectvisualstate.cs
- OrderByBuilder.cs
- ForeignKeyConstraint.cs
- ObjectCloneHelper.cs
- NumberFormatInfo.cs
- Int16KeyFrameCollection.cs
- TypedElement.cs
- SqlRowUpdatedEvent.cs
- DelegateSerializationHolder.cs
- ContravarianceAdapter.cs
- Queue.cs
- HttpModule.cs
- OdbcConnectionString.cs
- Permission.cs
- NonVisualControlAttribute.cs
- PolicyStatement.cs
- BmpBitmapDecoder.cs
- InternalSafeNativeMethods.cs
- XmlSerializationWriter.cs
- ScaleTransform.cs
- XPathNavigatorKeyComparer.cs
- XmlnsDefinitionAttribute.cs
- PackageRelationshipCollection.cs
- SerializerProvider.cs
- BinarySerializer.cs
- AppModelKnownContentFactory.cs
- TextPointer.cs
- CompiledRegexRunnerFactory.cs
- EntityDataSourceWrapper.cs
- QueryCacheManager.cs
- Function.cs
- DocumentsTrace.cs
- CodeValidator.cs
- WmfPlaceableFileHeader.cs
- JpegBitmapDecoder.cs
- RotateTransform3D.cs
- XmlToDatasetMap.cs
- MarkupCompilePass1.cs
- ListView.cs
- InvalidProgramException.cs
- RequiredAttributeAttribute.cs
- BinaryUtilClasses.cs
- CTreeGenerator.cs
- Source.cs
- Peer.cs
- ProfileModule.cs
- ResXFileRef.cs
- DetailsViewModeEventArgs.cs
- OpenTypeLayoutCache.cs
- MobileRedirect.cs
- InstanceKey.cs
- PageBuildProvider.cs
- ButtonRenderer.cs
- Matrix.cs
- ScriptDescriptor.cs