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
- DPTypeDescriptorContext.cs
- AutoResetEvent.cs
- MessagingActivityHelper.cs
- CacheRequest.cs
- OleDbTransaction.cs
- CompilationLock.cs
- PropertyGrid.cs
- NullReferenceException.cs
- TdsEnums.cs
- TraceLevelStore.cs
- DataObjectFieldAttribute.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- ServiceRoute.cs
- XslTransform.cs
- SqlPersonalizationProvider.cs
- Pkcs7Signer.cs
- DrawingBrush.cs
- BridgeDataRecord.cs
- HttpCacheVary.cs
- TreeView.cs
- Vector.cs
- FixedSOMGroup.cs
- WeakReference.cs
- XsdDuration.cs
- IdentityHolder.cs
- WindowsIPAddress.cs
- LostFocusEventManager.cs
- NumberFormatter.cs
- SqlRowUpdatingEvent.cs
- ConfigurationCollectionAttribute.cs
- TrustLevelCollection.cs
- AutomationElement.cs
- SmtpClient.cs
- Int32Rect.cs
- EntityCommandCompilationException.cs
- SoapSchemaExporter.cs
- SoapHeaders.cs
- ButtonColumn.cs
- WebPartConnectionsCancelEventArgs.cs
- ModifyActivitiesPropertyDescriptor.cs
- XmlSchemaIdentityConstraint.cs
- DataPagerFieldCollection.cs
- ZipIOExtraFieldElement.cs
- ThrowHelper.cs
- XmlAtomicValue.cs
- MatrixAnimationBase.cs
- VersionPair.cs
- WindowsAltTab.cs
- ListParagraph.cs
- PeerName.cs
- WebPartTransformerAttribute.cs
- TextTreeRootTextBlock.cs
- DBParameter.cs
- Switch.cs
- ForeignConstraint.cs
- SourceChangedEventArgs.cs
- UnknownBitmapEncoder.cs
- precedingquery.cs
- Html32TextWriter.cs
- NamespaceDisplay.xaml.cs
- DefaultSerializationProviderAttribute.cs
- SiteMap.cs
- XmlNodeList.cs
- QilIterator.cs
- TextShapeableCharacters.cs
- SafeCryptoHandles.cs
- WsdlImporter.cs
- CodeFieldReferenceExpression.cs
- IisTraceListener.cs
- ResolveNameEventArgs.cs
- ProfileServiceManager.cs
- PointLightBase.cs
- EntityDataSourceConfigureObjectContext.cs
- LogSwitch.cs
- Part.cs
- NotImplementedException.cs
- StatusBarAutomationPeer.cs
- EntityCommandDefinition.cs
- SingleAnimationBase.cs
- InstancePersistenceContext.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- SocketElement.cs
- TaskSchedulerException.cs
- Baml2006ReaderFrame.cs
- SystemTcpConnection.cs
- DtdParser.cs
- Property.cs
- ChannelFactoryRefCache.cs
- SessionSwitchEventArgs.cs
- ItemType.cs
- CodeDirectionExpression.cs
- HMACSHA384.cs
- SearchForVirtualItemEventArgs.cs
- SQLBinaryStorage.cs
- DataServiceProcessingPipelineEventArgs.cs
- DataSourceSelectArguments.cs
- DefaultValueConverter.cs
- WebMessageBodyStyleHelper.cs
- CdpEqualityComparer.cs
- ApplicationServiceHelper.cs