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
- WindowCollection.cs
- InvalidDataContractException.cs
- ArraySubsetEnumerator.cs
- FileNotFoundException.cs
- EventManager.cs
- PointAnimation.cs
- AccessKeyManager.cs
- HttpConfigurationSystem.cs
- AdRotator.cs
- InvalidEnumArgumentException.cs
- WebBrowserNavigatedEventHandler.cs
- SqlParameterizer.cs
- ErrorHandler.cs
- ImportRequest.cs
- NotifyIcon.cs
- BrowserDefinition.cs
- ApplicationFileCodeDomTreeGenerator.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- EditorPart.cs
- _ChunkParse.cs
- TagPrefixAttribute.cs
- KeysConverter.cs
- NestedContainer.cs
- DataGridTablesFactory.cs
- OrderPreservingPipeliningMergeHelper.cs
- ProcessProtocolHandler.cs
- ComponentConverter.cs
- MethodAccessException.cs
- VerificationException.cs
- SafeLocalAllocation.cs
- MenuTracker.cs
- PrimitiveType.cs
- InputBinder.cs
- DbConnectionPoolOptions.cs
- InkCanvasInnerCanvas.cs
- InstallHelper.cs
- Control.cs
- DiagnosticEventProvider.cs
- ParserExtension.cs
- CaseCqlBlock.cs
- PrinterSettings.cs
- XamlStream.cs
- ChtmlSelectionListAdapter.cs
- IndexingContentUnit.cs
- HttpApplicationStateWrapper.cs
- EmptyQuery.cs
- Expressions.cs
- DataGridViewButtonCell.cs
- CodeTypeParameter.cs
- ObjectDesignerDataSourceView.cs
- safelink.cs
- RegionInfo.cs
- HttpApplicationFactory.cs
- ValidationEventArgs.cs
- NetworkInformationException.cs
- HeaderedItemsControl.cs
- DataGridBoolColumn.cs
- SplineQuaternionKeyFrame.cs
- BitStack.cs
- XamlStream.cs
- OrderByQueryOptionExpression.cs
- XmlElementAttribute.cs
- AuthenticationManager.cs
- ColorMap.cs
- DbLambda.cs
- OleDbDataReader.cs
- RewritingPass.cs
- SharedConnectionListener.cs
- CompilerLocalReference.cs
- CodeTypeOfExpression.cs
- UnionCqlBlock.cs
- TargetParameterCountException.cs
- SpeechAudioFormatInfo.cs
- ErrorWebPart.cs
- CachedPathData.cs
- PenContexts.cs
- StandardBindingOptionalReliableSessionElement.cs
- CodeTypeOfExpression.cs
- Literal.cs
- BitmapEffectrendercontext.cs
- SchemaTypeEmitter.cs
- CatalogZone.cs
- DeploymentSection.cs
- Timer.cs
- LineInfo.cs
- MenuItem.cs
- ActivityCodeDomSerializer.cs
- ExpressionEditorSheet.cs
- HijriCalendar.cs
- QuotedPrintableStream.cs
- IdentityNotMappedException.cs
- SocketElement.cs
- RijndaelManagedTransform.cs
- ZipIOExtraFieldElement.cs
- RepeatBehavior.cs
- SecurityElement.cs
- RegexWriter.cs
- WebBrowsableAttribute.cs
- RelationshipType.cs
- HttpResponseHeader.cs