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
- WebBrowser.cs
- COM2EnumConverter.cs
- UidPropertyAttribute.cs
- FormViewInsertedEventArgs.cs
- UIElementAutomationPeer.cs
- RegexStringValidator.cs
- ConfigXmlText.cs
- SplineKeyFrames.cs
- UIHelper.cs
- InvalidOperationException.cs
- SqlTrackingService.cs
- PolyBezierSegment.cs
- DescendantQuery.cs
- path.cs
- SpeechRecognizer.cs
- EdmToObjectNamespaceMap.cs
- IdentifierService.cs
- MediaScriptCommandRoutedEventArgs.cs
- ConditionCollection.cs
- EntityDataSourceChangingEventArgs.cs
- ConfigUtil.cs
- ReferenceEqualityComparer.cs
- TableLayoutPanelDesigner.cs
- ProcessThread.cs
- WCFServiceClientProxyGenerator.cs
- SafeRegistryHandle.cs
- DbExpressionVisitor_TResultType.cs
- WCFModelStrings.Designer.cs
- HybridObjectCache.cs
- IdentityVerifier.cs
- OdbcConnection.cs
- FontConverter.cs
- GeometryDrawing.cs
- StatusBar.cs
- RoutedEvent.cs
- IPHostEntry.cs
- DbProviderSpecificTypePropertyAttribute.cs
- XamlStream.cs
- CalloutQueueItem.cs
- DBSqlParserColumn.cs
- FirstMatchCodeGroup.cs
- CustomCategoryAttribute.cs
- XPathDocumentIterator.cs
- HashSet.cs
- ReaderWriterLock.cs
- WmlPageAdapter.cs
- RouteParametersHelper.cs
- DataKeyCollection.cs
- StateMachine.cs
- AuthenticationModulesSection.cs
- StructuredTypeEmitter.cs
- ReceiveCompletedEventArgs.cs
- InheritedPropertyChangedEventArgs.cs
- CodeObject.cs
- HMACSHA256.cs
- ListViewDeletedEventArgs.cs
- TailPinnedEventArgs.cs
- MetadataException.cs
- Atom10FormatterFactory.cs
- DropSourceBehavior.cs
- RtfToXamlReader.cs
- PropertyConverter.cs
- WinFormsSecurity.cs
- StringUtil.cs
- XmlSerializationGeneratedCode.cs
- MatrixCamera.cs
- CodeCommentStatement.cs
- ApplicationDirectoryMembershipCondition.cs
- FixedSOMImage.cs
- WebPartZoneBaseDesigner.cs
- ToolStripManager.cs
- WeakEventManager.cs
- RouteItem.cs
- BindableTemplateBuilder.cs
- CompilerError.cs
- ActivityCollectionMarkupSerializer.cs
- ReceiveContent.cs
- Cursor.cs
- UIElement3D.cs
- AttributeInfo.cs
- OleCmdHelper.cs
- BitHelper.cs
- Proxy.cs
- UnaryQueryOperator.cs
- DeploymentSectionCache.cs
- FamilyTypeface.cs
- TransferMode.cs
- Keyboard.cs
- GroupDescription.cs
- XPathNodeHelper.cs
- SubclassTypeValidatorAttribute.cs
- CheckPair.cs
- ConnectionPoint.cs
- AudienceUriMode.cs
- MetadataArtifactLoaderCompositeFile.cs
- FormViewDesigner.cs
- DataGridAutoFormat.cs
- ArraySegment.cs
- DynamicRendererThreadManager.cs
- GPRECTF.cs