Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Controls / ActiveXHelper.cs / 1305600 / ActiveXHelper.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
//
// Description:
// Helper functions for ActiveX hosting
//
// Source copied from axhosthelper.cs
//
//
// History
// 04/17/05 KusumaV Created
//
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Runtime.InteropServices;
using System.Security;
using MS.Win32;
namespace MS.Internal.Controls
{
//
// This class contains static properties/methods that are internal.
// It also has types that make sense only for ActiveX hosting classes.
// In other words, this is a helper class for the ActiveX hosting classes.
//
internal class ActiveXHelper
{
//
// Types:
//
//
// Enumeration of the different states of the ActiveX control
public enum ActiveXState
{
Passive = 0, // Not loaded
Loaded = 1, // Loaded, but no server [ocx created]
Running = 2, // Server running, invisible [depersisted]
InPlaceActive = 4, // Server in-place active [visible]
UIActive = 8, // Server is UI active [ready to accept input]
Open = 16 // Server is opened for editing [not used]
}
//
// Static members:
//
//
// BitVector32 masks for various internal state flags.
public static readonly int sinkAttached = BitVector32.CreateMask();
public static readonly int inTransition = BitVector32.CreateMask(sinkAttached);
public static readonly int processingKeyUp = BitVector32.CreateMask(inTransition);
//[kusumav]These are from [....] code. These transforms were not working correctly
//I used Avalon sizes but leaving these in here since they are used in TransformCoordinates
//in ActiveXSite. It doesn't seem to be invoked by WebBrowser control
//
// Gets the LOGPIXELSX of the screen DC.
private static int logPixelsX = -1;
private static int logPixelsY = -1;
private const int HMperInch = 2540;
// Prevent compiler from generating public CTOR
private ActiveXHelper()
{
}
//
// Static helper methods:
//
public static int Pix2HM(int pix, int logP)
{
return (HMperInch * pix + (logP >> 1)) / logP;
}
public static int HM2Pix(int hm, int logP)
{
return (logP * hm + HMperInch / 2) / HMperInch;
}
//
// We cache LOGPIXELSX for optimization
///
/// Critical: This code calls critical code.
/// TreatAsSafe: This information is safe to expose.
///
public static int LogPixelsX
{
[SecurityCritical, SecurityTreatAsSafe]
get
{
if (logPixelsX == -1)
{
IntPtr hDC = UnsafeNativeMethods.GetDC(NativeMethods.NullHandleRef);
if (hDC != IntPtr.Zero)
{
logPixelsX = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, hDC), NativeMethods.LOGPIXELSX);
UnsafeNativeMethods.ReleaseDC(NativeMethods.NullHandleRef, new HandleRef(null, hDC));
}
}
return logPixelsX;
}
}
public static void ResetLogPixelsX()
{
logPixelsX = -1;
}
//
// We cache LOGPIXELSY for optimization
///
/// Critical: This code calls critical code.
/// TreatAsSafe: This information is safe to expose.
///
public static int LogPixelsY
{
[SecurityCritical, SecurityTreatAsSafe]
get
{
if (logPixelsY == -1)
{
IntPtr hDC = UnsafeNativeMethods.GetDC(NativeMethods.NullHandleRef);
if (hDC != IntPtr.Zero)
{
logPixelsY = UnsafeNativeMethods.GetDeviceCaps(new HandleRef(null, hDC), NativeMethods.LOGPIXELSY);
UnsafeNativeMethods.ReleaseDC(NativeMethods.NullHandleRef, new HandleRef(null, hDC));
}
}
return logPixelsY;
}
}
public static void ResetLogPixelsY()
{
logPixelsY = -1;
}
///
/// Wraps a given managed object, expected to be enabled for IDispatch interop, in a native one that
/// trivially delegates the IDispatch calls. This ensures that cross-context calls on the managed object
/// occur on the same thread (assumed to be in an STA), not on some random RPC worker thread.
///
///
/// CLR objects are thread-agile. But nearly all COM objects we use are STA-bound, and we also need
/// our implementations of COM interfaces to be called on the thread on which their object was created,
/// often because of interacting with core WPF objects that also have thread affinity.
/// Getting a CLR object to "stick to the right thread" when called from another context (like cross-process)
/// turns out to be incredibly hard. [....] has solved the problem with StandardOleMarshalObject.
/// Unfortunately, it wasn't designed to work in partial trust. And apart from that, it just doesn't
/// seem to work cross-process, which is what we actually need for the WebOC hosting.
/// There's also the ContextBoundObject family. A derived object could be made thread-bound. But this
/// doesn't work for us either, because we get deadlocks. COM allows re-entrancy when "blocked" on an
/// outgoing call from an STA, but ContextBoundObject apparently doesn't--it really blocks.
///
///
/// Critical because of SUC.
/// Since wrapping a managed object in a native one that trivially delegates IDispatch calls is safe,
/// a caller of this method can generally be marked SecurityTreatAsSafe.
///
[SuppressUnmanagedCodeSecurity, SecurityCritical]
[DllImport(ExternDll.PresentationHostDll, PreserveSig=false)]
[return: MarshalAs(UnmanagedType.IDispatch)]
internal static extern object CreateIDispatchSTAForwarder([MarshalAs(UnmanagedType.IDispatch)] object pDispatchDelegate);
}
}
// 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
- HwndMouseInputProvider.cs
- ImplicitInputBrush.cs
- NotifyIcon.cs
- QueryResponse.cs
- ListViewItemMouseHoverEvent.cs
- PositiveTimeSpanValidatorAttribute.cs
- TableProviderWrapper.cs
- HostDesigntimeLicenseContext.cs
- DbConnectionPoolGroup.cs
- CharacterBufferReference.cs
- AmbientProperties.cs
- _KerberosClient.cs
- ConditionalBranch.cs
- CorrelationManager.cs
- SoapHeaders.cs
- WmpBitmapEncoder.cs
- RemotingClientProxy.cs
- CharConverter.cs
- EntityDataSourceViewSchema.cs
- XmlRawWriter.cs
- TextBox.cs
- Application.cs
- HttpCookieCollection.cs
- BindingWorker.cs
- HTTPNotFoundHandler.cs
- PrintDocument.cs
- LinkButton.cs
- StrokeRenderer.cs
- FilterableAttribute.cs
- CompiledXpathExpr.cs
- RuleInfoComparer.cs
- ReadWriteObjectLock.cs
- CodeTypeConstructor.cs
- ImageCodecInfo.cs
- Type.cs
- TypedServiceChannelBuilder.cs
- TextServicesProperty.cs
- QilXmlReader.cs
- CharAnimationBase.cs
- NavigationFailedEventArgs.cs
- InkPresenterAutomationPeer.cs
- SecurityListenerSettingsLifetimeManager.cs
- ValidationError.cs
- StreamGeometry.cs
- XPathScanner.cs
- WrapPanel.cs
- ButtonBase.cs
- EventLogPermissionEntryCollection.cs
- FloatUtil.cs
- CompiledRegexRunnerFactory.cs
- ParamArrayAttribute.cs
- ElementHost.cs
- util.cs
- EventListenerClientSide.cs
- Vector3dCollection.cs
- ProxyWebPart.cs
- DataSpaceManager.cs
- MenuBindingsEditorForm.cs
- ParameterCollection.cs
- RefreshResponseInfo.cs
- Metadata.cs
- OdbcTransaction.cs
- IFlowDocumentViewer.cs
- XmlSchemaValidationException.cs
- WindowsTokenRoleProvider.cs
- ControlEvent.cs
- MessageUtil.cs
- TextServicesCompartmentContext.cs
- DataMemberAttribute.cs
- EpmContentDeSerializer.cs
- GradientBrush.cs
- ClientSideProviderDescription.cs
- DesignerAutoFormatCollection.cs
- XmlSchemaComplexContentExtension.cs
- AssemblyAttributes.cs
- OleStrCAMarshaler.cs
- WorkflowDesignerMessageFilter.cs
- TextProperties.cs
- NotificationContext.cs
- Select.cs
- CollectionEditor.cs
- SslSecurityTokenParameters.cs
- SafeFileMappingHandle.cs
- WebPartUserCapability.cs
- PostBackOptions.cs
- ContainerParaClient.cs
- Animatable.cs
- HyperLinkField.cs
- Geometry.cs
- XpsResourcePolicy.cs
- ResizeGrip.cs
- EmptyQuery.cs
- SmiConnection.cs
- SiteMapSection.cs
- XmlSerializableReader.cs
- EntityWrapperFactory.cs
- IPPacketInformation.cs
- FamilyMap.cs
- InsufficientMemoryException.cs
- GraphicsContainer.cs