Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2FontConverter.cs / 1305376 / 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; using System.Runtime.Versioning; ////// /// 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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 /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] 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
- LogWriteRestartAreaState.cs
- HtmlInputButton.cs
- SQLInt64.cs
- HttpVersion.cs
- CaseInsensitiveOrdinalStringComparer.cs
- GridViewSelectEventArgs.cs
- RenderingBiasValidation.cs
- DragStartedEventArgs.cs
- RenderOptions.cs
- CurrencyWrapper.cs
- SingleConverter.cs
- ContentType.cs
- ExpressionVisitorHelpers.cs
- MetadataSet.cs
- ArrangedElementCollection.cs
- SecurityHelper.cs
- TransformDescriptor.cs
- StringArrayConverter.cs
- PackWebRequest.cs
- UInt16Storage.cs
- ImportDesigner.xaml.cs
- WmpBitmapDecoder.cs
- sqlcontext.cs
- GridViewDeletedEventArgs.cs
- XPathQilFactory.cs
- XmlUtil.cs
- SqlConnectionManager.cs
- ProfileGroupSettingsCollection.cs
- TimeZone.cs
- DataListItemCollection.cs
- COM2ExtendedTypeConverter.cs
- EventsTab.cs
- ItemCheckedEvent.cs
- SegmentTree.cs
- FileDialog_Vista.cs
- CompleteWizardStep.cs
- DefaultTextStore.cs
- AlternateViewCollection.cs
- CollectionEditorDialog.cs
- ListParagraph.cs
- TextMarkerSource.cs
- AndCondition.cs
- PostBackOptions.cs
- StaticFileHandler.cs
- TryCatch.cs
- RangeValuePattern.cs
- DbConvert.cs
- ExpressionBinding.cs
- EmptyStringExpandableObjectConverter.cs
- Properties.cs
- SqlVisitor.cs
- DataGridViewMethods.cs
- SubclassTypeValidatorAttribute.cs
- CustomAttributeSerializer.cs
- ToolStripContentPanel.cs
- CanonicalFontFamilyReference.cs
- GZipStream.cs
- FileUtil.cs
- ValuePattern.cs
- SessionStateSection.cs
- SqlLiftWhereClauses.cs
- CompiledQuery.cs
- RectangleGeometry.cs
- FloaterBaseParaClient.cs
- ClrProviderManifest.cs
- XhtmlBasicLinkAdapter.cs
- LineServicesCallbacks.cs
- StatusBarPanel.cs
- X509CertificateStore.cs
- RelOps.cs
- ViewStateModeByIdAttribute.cs
- securitycriticaldataformultiplegetandset.cs
- FilterException.cs
- ImplicitInputBrush.cs
- XPathExpr.cs
- RawMouseInputReport.cs
- SendParametersContent.cs
- WebRequestModuleElementCollection.cs
- GeneralTransform3DGroup.cs
- OptimizedTemplateContentHelper.cs
- PropertyGridEditorPart.cs
- TypeDescriptionProvider.cs
- Border.cs
- DockingAttribute.cs
- Certificate.cs
- DataGridViewSelectedColumnCollection.cs
- TableStyle.cs
- TextBox.cs
- LabelAutomationPeer.cs
- MenuItemStyle.cs
- PathFigure.cs
- AccessText.cs
- ListDesigner.cs
- SQLMoney.cs
- SecurityTokenParametersEnumerable.cs
- Int32Storage.cs
- DoubleCollectionConverter.cs
- GuidelineSet.cs
- ProgressBar.cs
- OrderingInfo.cs