Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsContainer.cs / 1 / WindowsContainer.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Windows Container Proxy
//
// History:
// 07/20/2004 : [....] Created
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System.Text;
using MS.Win32;
namespace MS.Internal.AutomationProxies
{
class WindowsContainer : ProxyHwnd, IRawElementProviderHwndOverride
{
// -----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
public WindowsContainer (IntPtr hwnd, ProxyHwnd parent, int item)
: base( hwnd, parent, item)
{
string className = Misc.ProxyGetClassName(hwnd);
if (!string.IsNullOrEmpty(className))
{
if (className.Equals("#32770"))
{
_sType = ST.Get(STID.LocalizedControlTypeDialog);
}
else if (className.IndexOf("AfxControlBar", StringComparison.Ordinal) != -1)
{
_sType = ST.Get(STID.LocalizedControlTypeContainer);
}
}
_fIsContent = IsTopLevelWindow();
_fIsKeyboardFocusable = true;
}
#endregion
#region Proxy Create
// Static Create method called by UIAutomation to create this proxy.
// returns null if unsuccessful
internal static IRawElementProviderSimple Create(IntPtr hwnd, int idChild, int idObject)
{
return Create(hwnd, idChild);
}
private static IRawElementProviderSimple Create(IntPtr hwnd, int idChild)
{
// Something is wrong if idChild is not zero
if (idChild != 0)
{
System.Diagnostics.Debug.Assert(idChild == 0, "Invalid Child Id, idChild != 0");
throw new ArgumentOutOfRangeException("idChild", idChild, SR.Get(SRID.ShouldBeZero));
}
return new WindowsContainer(hwnd, null, 0);
}
#endregion
//------------------------------------------------------
//
// Patterns Implementation
//
//-----------------------------------------------------
#region ProxySimple Interface
// Process all the Logical and Raw Element Properties
internal override object GetElementProperty(AutomationProperty idProp)
{
if (idProp == AutomationElement.IsControlElementProperty)
{
return IsTopLevelWindow();
}
return base.GetElementProperty(idProp);
}
#endregion
//------------------------------------------------------
//
// Interface IRawElementProviderHwndOverride
//
//------------------------------------------------------
#region IRawElementProviderHwndOverride Interface
IRawElementProviderSimple IRawElementProviderHwndOverride.GetOverrideProviderForHwnd(IntPtr hwnd)
{
// return the appropriate placeholder for the given hwnd...
// loop over all the tabs to find it.
IntPtr hwndTab;
int item;
if (IsTabPage(hwnd, out hwndTab, out item))
{
WindowsTab wTab = new WindowsTab(hwndTab, null, 0);
return new WindowsTabChildOverrideProxy(hwnd, wTab.CreateTabItem(item), item);
}
return null;
}
#endregion IRawElementProviderHwndOverride Interface
//-----------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
private bool IsTopLevelWindow()
{
int style = WindowStyle;
// WS_OVERLAPPED and WS_POPUP indicate a top level window.
// WS_OVERLAPPED constant is 0, it does not make a good mask. But all
// WS_OVERLAPPED windows MUST have a caption so use WS_CAPTION instead.
return Misc.IsBitSet(style, NativeMethods.WS_CAPTION) ||
Misc.IsBitSet(style, NativeMethods.WS_POPUP);
}
private bool HasTabPageStyle(IntPtr hwnd)
{
int style = Misc.GetWindowStyle(hwnd);
int exstyle = Misc.GetWindowExStyle(hwnd);
return Misc.IsBitSet(style, NativeMethods.DS_CONTROL) &&
Misc.IsBitSet(style, NativeMethods.WS_CHILD) &&
Misc.IsBitSet(exstyle, NativeMethods.WS_EX_CONTROLPARENT);
}
private bool IsTabPage(IntPtr hwnd, out IntPtr hwndTab, out int item)
{
hwndTab = IntPtr.Zero;
item = -1;
if (!SafeNativeMethods.IsWindowVisible(hwnd))
{
return false;
}
try
{
if (!HasTabPageStyle(hwnd))
{
return false;
}
}
catch (ElementNotAvailableException)
{
// if the received an ElementNotAvailableException this hwnd can not be a
// tab page so return false.
return false;
}
string dlgName = Misc.ProxyGetText(hwnd);
// if the dialog does not have a title there is no way to match to a tab item.
if (string.IsNullOrEmpty(dlgName))
{
return false;
}
IntPtr hwndParent = Misc.GetParent(hwnd);
if (hwndParent == IntPtr.Zero)
{
return false;
}
hwndTab = Misc.FindWindowEx(hwndParent, IntPtr.Zero, "SysTabControl32", null);
// if the tab control is invisible then the tab control is not there.
if (hwndTab == IntPtr.Zero || !SafeNativeMethods.IsWindowVisible(hwndTab))
{
return false;
}
item = WindowsTabItem.GetCurrentSelectedItem(hwndTab);
return dlgName.Equals(WindowsTabItem.GetName(hwndTab, item, true));
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Windows Container Proxy
//
// History:
// 07/20/2004 : [....] Created
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System.Text;
using MS.Win32;
namespace MS.Internal.AutomationProxies
{
class WindowsContainer : ProxyHwnd, IRawElementProviderHwndOverride
{
// -----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
public WindowsContainer (IntPtr hwnd, ProxyHwnd parent, int item)
: base( hwnd, parent, item)
{
string className = Misc.ProxyGetClassName(hwnd);
if (!string.IsNullOrEmpty(className))
{
if (className.Equals("#32770"))
{
_sType = ST.Get(STID.LocalizedControlTypeDialog);
}
else if (className.IndexOf("AfxControlBar", StringComparison.Ordinal) != -1)
{
_sType = ST.Get(STID.LocalizedControlTypeContainer);
}
}
_fIsContent = IsTopLevelWindow();
_fIsKeyboardFocusable = true;
}
#endregion
#region Proxy Create
// Static Create method called by UIAutomation to create this proxy.
// returns null if unsuccessful
internal static IRawElementProviderSimple Create(IntPtr hwnd, int idChild, int idObject)
{
return Create(hwnd, idChild);
}
private static IRawElementProviderSimple Create(IntPtr hwnd, int idChild)
{
// Something is wrong if idChild is not zero
if (idChild != 0)
{
System.Diagnostics.Debug.Assert(idChild == 0, "Invalid Child Id, idChild != 0");
throw new ArgumentOutOfRangeException("idChild", idChild, SR.Get(SRID.ShouldBeZero));
}
return new WindowsContainer(hwnd, null, 0);
}
#endregion
//------------------------------------------------------
//
// Patterns Implementation
//
//-----------------------------------------------------
#region ProxySimple Interface
// Process all the Logical and Raw Element Properties
internal override object GetElementProperty(AutomationProperty idProp)
{
if (idProp == AutomationElement.IsControlElementProperty)
{
return IsTopLevelWindow();
}
return base.GetElementProperty(idProp);
}
#endregion
//------------------------------------------------------
//
// Interface IRawElementProviderHwndOverride
//
//------------------------------------------------------
#region IRawElementProviderHwndOverride Interface
IRawElementProviderSimple IRawElementProviderHwndOverride.GetOverrideProviderForHwnd(IntPtr hwnd)
{
// return the appropriate placeholder for the given hwnd...
// loop over all the tabs to find it.
IntPtr hwndTab;
int item;
if (IsTabPage(hwnd, out hwndTab, out item))
{
WindowsTab wTab = new WindowsTab(hwndTab, null, 0);
return new WindowsTabChildOverrideProxy(hwnd, wTab.CreateTabItem(item), item);
}
return null;
}
#endregion IRawElementProviderHwndOverride Interface
//-----------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
private bool IsTopLevelWindow()
{
int style = WindowStyle;
// WS_OVERLAPPED and WS_POPUP indicate a top level window.
// WS_OVERLAPPED constant is 0, it does not make a good mask. But all
// WS_OVERLAPPED windows MUST have a caption so use WS_CAPTION instead.
return Misc.IsBitSet(style, NativeMethods.WS_CAPTION) ||
Misc.IsBitSet(style, NativeMethods.WS_POPUP);
}
private bool HasTabPageStyle(IntPtr hwnd)
{
int style = Misc.GetWindowStyle(hwnd);
int exstyle = Misc.GetWindowExStyle(hwnd);
return Misc.IsBitSet(style, NativeMethods.DS_CONTROL) &&
Misc.IsBitSet(style, NativeMethods.WS_CHILD) &&
Misc.IsBitSet(exstyle, NativeMethods.WS_EX_CONTROLPARENT);
}
private bool IsTabPage(IntPtr hwnd, out IntPtr hwndTab, out int item)
{
hwndTab = IntPtr.Zero;
item = -1;
if (!SafeNativeMethods.IsWindowVisible(hwnd))
{
return false;
}
try
{
if (!HasTabPageStyle(hwnd))
{
return false;
}
}
catch (ElementNotAvailableException)
{
// if the received an ElementNotAvailableException this hwnd can not be a
// tab page so return false.
return false;
}
string dlgName = Misc.ProxyGetText(hwnd);
// if the dialog does not have a title there is no way to match to a tab item.
if (string.IsNullOrEmpty(dlgName))
{
return false;
}
IntPtr hwndParent = Misc.GetParent(hwnd);
if (hwndParent == IntPtr.Zero)
{
return false;
}
hwndTab = Misc.FindWindowEx(hwndParent, IntPtr.Zero, "SysTabControl32", null);
// if the tab control is invisible then the tab control is not there.
if (hwndTab == IntPtr.Zero || !SafeNativeMethods.IsWindowVisible(hwndTab))
{
return false;
}
item = WindowsTabItem.GetCurrentSelectedItem(hwndTab);
return dlgName.Equals(WindowsTabItem.GetName(hwndTab, item, true));
}
#endregion
}
}
// 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
- DependencyPropertyChangedEventArgs.cs
- ChannelEndpointElementCollection.cs
- LazyTextWriterCreator.cs
- SendKeys.cs
- GlobalProxySelection.cs
- Menu.cs
- DataObjectAttribute.cs
- SourceSwitch.cs
- SqlRecordBuffer.cs
- SocketException.cs
- SubpageParagraph.cs
- QilSortKey.cs
- Verify.cs
- DirectoryInfo.cs
- ConfigXmlSignificantWhitespace.cs
- FixedPage.cs
- CodeSnippetStatement.cs
- MultiSelectRootGridEntry.cs
- SoapTypeAttribute.cs
- SapiGrammar.cs
- RelationshipDetailsRow.cs
- PolyQuadraticBezierSegment.cs
- HiddenField.cs
- Rectangle.cs
- ListBoxItemWrapperAutomationPeer.cs
- ContractsBCL.cs
- EdmValidator.cs
- autovalidator.cs
- EntityKeyElement.cs
- _SslStream.cs
- BindingBase.cs
- PrimarySelectionAdorner.cs
- NullToBooleanConverter.cs
- PrinterResolution.cs
- ApplyTemplatesAction.cs
- PropertyChange.cs
- CacheChildrenQuery.cs
- BufferBuilder.cs
- ArithmeticException.cs
- Instrumentation.cs
- ThreadStateException.cs
- XmlAttributes.cs
- MatrixKeyFrameCollection.cs
- NullableDecimalAverageAggregationOperator.cs
- BitmapEffectInputConnector.cs
- ExitEventArgs.cs
- SerializationSectionGroup.cs
- BindingSource.cs
- ContainerSelectorGlyph.cs
- TextBox.cs
- CounterCreationDataCollection.cs
- XmlAtomicValue.cs
- ObjectStateEntryDbDataRecord.cs
- XmlILConstructAnalyzer.cs
- Int32RectValueSerializer.cs
- HostingPreferredMapPath.cs
- SpotLight.cs
- EntityDesignerBuildProvider.cs
- FlagsAttribute.cs
- wgx_commands.cs
- ObjectMemberMapping.cs
- SourceFileInfo.cs
- CopyAction.cs
- CompressionTracing.cs
- DataKey.cs
- EntityType.cs
- PrinterSettings.cs
- Rect.cs
- StrokeNode.cs
- XmlRawWriterWrapper.cs
- ObjectStateManagerMetadata.cs
- printdlgexmarshaler.cs
- RSAPKCS1SignatureDeformatter.cs
- ToolBarButton.cs
- Stackframe.cs
- TextWriterTraceListener.cs
- XmlWriter.cs
- DataMisalignedException.cs
- TemplateComponentConnector.cs
- TextEmbeddedObject.cs
- ConnectionStringSettings.cs
- SequentialUshortCollection.cs
- Thread.cs
- HwndAppCommandInputProvider.cs
- PersonalizationEntry.cs
- BigInt.cs
- FontUnitConverter.cs
- AsyncStreamReader.cs
- ToolTip.cs
- SectionXmlInfo.cs
- PrimarySelectionAdorner.cs
- ObjectViewEntityCollectionData.cs
- DataGrid.cs
- namescope.cs
- NamespaceListProperty.cs
- CollectionViewProxy.cs
- WebPartTransformerCollection.cs
- AnimationClock.cs
- CFStream.cs
- OperationFormatStyle.cs