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
- ComNativeDescriptor.cs
- DataGridToolTip.cs
- InternalUserCancelledException.cs
- UnsafeNativeMethods.cs
- ExternalCalls.cs
- BevelBitmapEffect.cs
- DesignOnlyAttribute.cs
- HtmlImage.cs
- DataGridViewRowEventArgs.cs
- BreadCrumbTextConverter.cs
- ConfigXmlElement.cs
- PipeException.cs
- RawKeyboardInputReport.cs
- SmtpMail.cs
- NamespaceInfo.cs
- NonSerializedAttribute.cs
- Matrix.cs
- WindowsListBox.cs
- RawStylusInput.cs
- CodeAttributeArgument.cs
- GenericAuthenticationEventArgs.cs
- Form.cs
- ClientConvert.cs
- Parameter.cs
- DesignerCategoryAttribute.cs
- ErrorHandler.cs
- GroupBoxAutomationPeer.cs
- HMACSHA1.cs
- LinkClickEvent.cs
- SqlDataSourceCommandParser.cs
- DataGridViewImageCell.cs
- Encoder.cs
- ReverseInheritProperty.cs
- ViewStateException.cs
- SudsParser.cs
- Zone.cs
- SizeConverter.cs
- EncryptedKey.cs
- NotificationContext.cs
- XhtmlTextWriter.cs
- Attributes.cs
- Constants.cs
- FileChangesMonitor.cs
- ToolboxDataAttribute.cs
- AccessControlEntry.cs
- SchemaSetCompiler.cs
- IntPtr.cs
- BooleanAnimationUsingKeyFrames.cs
- WebPartMinimizeVerb.cs
- LocalizabilityAttribute.cs
- SqlDataSourceView.cs
- LoadedOrUnloadedOperation.cs
- InputMethodStateTypeInfo.cs
- BindingsCollection.cs
- ClientSponsor.cs
- DataGridViewRowConverter.cs
- NumberFormatInfo.cs
- AsyncDataRequest.cs
- OrderByQueryOptionExpression.cs
- SocketException.cs
- SemanticResolver.cs
- DataContractSerializerSection.cs
- WebResourceUtil.cs
- DrawListViewItemEventArgs.cs
- BinaryFormatterSinks.cs
- ListSurrogate.cs
- KeyInstance.cs
- CachedBitmap.cs
- CLSCompliantAttribute.cs
- DebugInfoGenerator.cs
- PinnedBufferMemoryStream.cs
- BaseResourcesBuildProvider.cs
- Encoding.cs
- NamespaceCollection.cs
- XmlSchemaAnnotated.cs
- JsonDataContract.cs
- VarRefManager.cs
- ExpressionsCollectionConverter.cs
- SmiRecordBuffer.cs
- ArrangedElementCollection.cs
- ExceptionRoutedEventArgs.cs
- FixedTextView.cs
- FixedBufferAttribute.cs
- PrintingPermissionAttribute.cs
- RegexFCD.cs
- SqlDataSourceStatusEventArgs.cs
- LineServicesCallbacks.cs
- QueuePathDialog.cs
- Convert.cs
- RawStylusInputReport.cs
- EntityObject.cs
- Accessors.cs
- DispatchWrapper.cs
- SqlNotificationEventArgs.cs
- ClientTargetSection.cs
- AuthenticationModulesSection.cs
- ZipIOLocalFileDataDescriptor.cs
- PrintPreviewDialog.cs
- InputLanguage.cs
- DecoderExceptionFallback.cs