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
- Soap12ServerProtocol.cs
- XmlSchema.cs
- SQLCharsStorage.cs
- PasswordDeriveBytes.cs
- HScrollProperties.cs
- Renderer.cs
- ValidatorCompatibilityHelper.cs
- TimeManager.cs
- SqlFileStream.cs
- ListViewDesigner.cs
- CodeTryCatchFinallyStatement.cs
- FirstMatchCodeGroup.cs
- _DynamicWinsockMethods.cs
- CellConstantDomain.cs
- DigitShape.cs
- StatusBarAutomationPeer.cs
- DataGridViewAutoSizeModeEventArgs.cs
- counter.cs
- ProviderIncompatibleException.cs
- TextEditorSpelling.cs
- ProfileServiceManager.cs
- VisemeEventArgs.cs
- WinHttpWebProxyFinder.cs
- ExternalFile.cs
- EnumMember.cs
- FormParameter.cs
- LinqDataSourceHelper.cs
- PointLightBase.cs
- FamilyTypeface.cs
- TabControlCancelEvent.cs
- XmlSchemaSubstitutionGroup.cs
- SecurityState.cs
- ColorAnimationUsingKeyFrames.cs
- ForeignKeyConstraint.cs
- SqlClientPermission.cs
- AddInContractAttribute.cs
- LocatorPart.cs
- XmlnsDefinitionAttribute.cs
- AdapterUtil.cs
- ProcessProtocolHandler.cs
- EntityCommandDefinition.cs
- CredentialSelector.cs
- WorkflowOperationErrorHandler.cs
- Funcletizer.cs
- CompilationPass2TaskInternal.cs
- WebPartsPersonalization.cs
- HierarchicalDataBoundControlAdapter.cs
- HtmlTernaryTree.cs
- SerTrace.cs
- CompilerGlobalScopeAttribute.cs
- XmlSchemaComplexContentExtension.cs
- bidPrivateBase.cs
- SoapAttributeOverrides.cs
- DomNameTable.cs
- WithStatement.cs
- ControlCollection.cs
- DataMisalignedException.cs
- TemplateField.cs
- Convert.cs
- AuthorizationSection.cs
- ReferentialConstraint.cs
- ConfigurationSettings.cs
- HitTestResult.cs
- BrowserTree.cs
- MergeFilterQuery.cs
- ComponentEditorForm.cs
- DataServices.cs
- RefreshEventArgs.cs
- DataGridViewColumnTypeEditor.cs
- MenuTracker.cs
- DataControlButton.cs
- DynamicField.cs
- DataSourceCollectionBase.cs
- SafeRegistryHandle.cs
- ProfilePropertySettings.cs
- DataServiceConfiguration.cs
- PerformanceCounterPermissionEntryCollection.cs
- TransactionProxy.cs
- NetworkInformationException.cs
- InheritanceContextChangedEventManager.cs
- ListView.cs
- PartialArray.cs
- ListViewItem.cs
- TimeSpanFormat.cs
- ResourcePool.cs
- AnimatedTypeHelpers.cs
- Semaphore.cs
- XamlLoadErrorInfo.cs
- RichTextBoxConstants.cs
- TextServicesManager.cs
- basemetadatamappingvisitor.cs
- ObjectTag.cs
- MimeBasePart.cs
- DataError.cs
- SlipBehavior.cs
- ContextToken.cs
- PackageDigitalSignature.cs
- LZCodec.cs
- MessageQueuePermissionEntry.cs
- Trigger.cs