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
- SecurityKeyIdentifierClause.cs
- RoleBoolean.cs
- SoapElementAttribute.cs
- LayoutTable.cs
- OleStrCAMarshaler.cs
- MetadataArtifactLoaderResource.cs
- KernelTypeValidation.cs
- RegisteredArrayDeclaration.cs
- RegisteredDisposeScript.cs
- ButtonColumn.cs
- Menu.cs
- TypeConverterAttribute.cs
- PropertyChangingEventArgs.cs
- WindowsListViewScroll.cs
- Literal.cs
- PersonalizationStateInfo.cs
- ApplicationProxyInternal.cs
- InputLanguageEventArgs.cs
- DetailsViewDeletedEventArgs.cs
- RequestValidator.cs
- DPCustomTypeDescriptor.cs
- FixedSOMTextRun.cs
- AddressHeader.cs
- FixedSOMTableRow.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- ProxyWebPartManager.cs
- BuildProvider.cs
- GrabHandleGlyph.cs
- SeekableReadStream.cs
- KnownTypeDataContractResolver.cs
- ConstructorExpr.cs
- odbcmetadatacollectionnames.cs
- SmtpMail.cs
- DefaultDialogButtons.cs
- PropertyBuilder.cs
- CmsUtils.cs
- ScriptMethodAttribute.cs
- TimeoutException.cs
- IDispatchConstantAttribute.cs
- OleDbDataAdapter.cs
- ByteStorage.cs
- MessageEventSubscriptionService.cs
- ByteStack.cs
- RegexParser.cs
- HttpChannelBindingToken.cs
- GradientStop.cs
- ChangeBlockUndoRecord.cs
- PropertyPath.cs
- FileSystemEnumerable.cs
- EnumUnknown.cs
- BindStream.cs
- SoapSchemaImporter.cs
- ObjectTag.cs
- SoapAttributeOverrides.cs
- VersionUtil.cs
- Italic.cs
- NavigationService.cs
- XmlSchemaException.cs
- FixedSOMFixedBlock.cs
- ValueSerializer.cs
- xmlglyphRunInfo.cs
- NetSectionGroup.cs
- ReaderWriterLock.cs
- SystemUdpStatistics.cs
- RequiredFieldValidator.cs
- OracleException.cs
- PermissionAttributes.cs
- FileSystemEventArgs.cs
- ScaleTransform.cs
- EditorAttribute.cs
- XmlSchemaValidator.cs
- HierarchicalDataSourceIDConverter.cs
- SqlInternalConnection.cs
- ImageCodecInfoPrivate.cs
- ProtectedProviderSettings.cs
- ConnectionStringEditor.cs
- WaitHandleCannotBeOpenedException.cs
- AttachedPropertiesService.cs
- DateTimeFormatInfo.cs
- TreeNodeCollection.cs
- DependencySource.cs
- DynamicILGenerator.cs
- Viewport3DVisual.cs
- PinnedBufferMemoryStream.cs
- securitycriticaldata.cs
- MexHttpBindingElement.cs
- ReadWriteObjectLock.cs
- DuplexSecurityProtocolFactory.cs
- VisualStyleInformation.cs
- DrawingContextWalker.cs
- XmlSignatureManifest.cs
- LogWriteRestartAreaState.cs
- DataGridViewCellCollection.cs
- TemplateBindingExtensionConverter.cs
- BaseDataListActionList.cs
- CheckBoxPopupAdapter.cs
- DataServiceEntityAttribute.cs
- SafeWaitHandle.cs
- TextRange.cs
- CreateUserWizardStep.cs