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
- TypeDependencyAttribute.cs
- HWStack.cs
- FullTextBreakpoint.cs
- Ops.cs
- CodeIdentifier.cs
- PartialList.cs
- CompilerScope.cs
- MeasureItemEvent.cs
- ContainerControl.cs
- EncodingNLS.cs
- SqlInternalConnectionSmi.cs
- BamlRecordReader.cs
- dtdvalidator.cs
- PreloadedPackages.cs
- SmtpSection.cs
- SystemIPInterfaceStatistics.cs
- StreamMarshaler.cs
- Metafile.cs
- MobileControl.cs
- TemplateXamlTreeBuilder.cs
- Substitution.cs
- DeflateStream.cs
- HtmlGenericControl.cs
- ObjectToIdCache.cs
- ResourceSet.cs
- ControlCollection.cs
- SessionEndingCancelEventArgs.cs
- XmlSchemaValidator.cs
- LiteralDesigner.cs
- DataColumnMappingCollection.cs
- NameValuePair.cs
- SequenceRange.cs
- ClientApiGenerator.cs
- DataGridHeaderBorder.cs
- QilScopedVisitor.cs
- ClonableStack.cs
- MatrixAnimationUsingKeyFrames.cs
- SapiAttributeParser.cs
- MaskedTextBoxTextEditorDropDown.cs
- TextRangeBase.cs
- SqlTypesSchemaImporter.cs
- ThreadStartException.cs
- StoreItemCollection.Loader.cs
- SimpleMailWebEventProvider.cs
- OracleParameterBinding.cs
- PerformanceCounterScope.cs
- IdentitySection.cs
- ConstNode.cs
- AuthenticationConfig.cs
- WSDualHttpSecurity.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- AttributeProviderAttribute.cs
- ListenerConnectionModeReader.cs
- Compress.cs
- ThicknessKeyFrameCollection.cs
- PropertyGridCommands.cs
- Stacktrace.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- EntityProviderServices.cs
- EncoderExceptionFallback.cs
- DetailsViewDeleteEventArgs.cs
- InputMethodStateTypeInfo.cs
- AttachedPropertyMethodSelector.cs
- SortedList.cs
- Panel.cs
- Type.cs
- DependencyPropertyConverter.cs
- UnsafeNativeMethods.cs
- Win32PrintDialog.cs
- DecimalFormatter.cs
- CheckBoxFlatAdapter.cs
- UrlPath.cs
- HtmlInputPassword.cs
- ExpressionBinding.cs
- IgnoreDataMemberAttribute.cs
- OperationCanceledException.cs
- IImplicitResourceProvider.cs
- SaveFileDialog.cs
- WebPartConnectionsCancelVerb.cs
- ExpressionPrefixAttribute.cs
- TextTrailingCharacterEllipsis.cs
- ProcessModule.cs
- TargetConverter.cs
- SrgsGrammarCompiler.cs
- TextInfo.cs
- OptimalBreakSession.cs
- PrefixQName.cs
- PathGeometry.cs
- ResourceDescriptionAttribute.cs
- AstTree.cs
- X509Certificate2Collection.cs
- ActivityStatusChangeEventArgs.cs
- EntityParameter.cs
- RenderCapability.cs
- TreeViewAutomationPeer.cs
- HttpCachePolicy.cs
- DateTimeParse.cs
- ReferencedType.cs
- AnnotationResourceCollection.cs
- DllHostedComPlusServiceHost.cs