Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / BoundingRectTracker.cs / 1 / BoundingRectTracker.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Class used to send BoundingRect changes for hwnds
//
// History:
// 06/17/2003 : BrendanM Ported to WCP
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Windows.Automation;
using System.Runtime.InteropServices;
using System.ComponentModel;
using MS.Win32;
namespace MS.Internal.Automation
{
// BoundingRectTracker - Class used to send BoundingRect changes for hwnds
internal class BoundingRectTracker : WinEventWrap
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
internal BoundingRectTracker()
: base(new int[]{NativeMethods.EVENT_OBJECT_LOCATIONCHANGE, NativeMethods.EVENT_OBJECT_HIDE})
{
// Intentionally not setting the callback for the base WinEventWrap since the WinEventProc override
// in this class calls RaiseEventInThisClientOnly to actually raise the event to the client.
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime)
{
// Filter... send an event for hwnd only
if ( hwnd == IntPtr.Zero || idObject != UnsafeNativeMethods.OBJID_WINDOW )
return;
switch (eventId)
{
case NativeMethods.EVENT_OBJECT_HIDE: OnHide(hwnd, idObject, idChild); break;
case NativeMethods.EVENT_OBJECT_LOCATIONCHANGE: OnLocationChange(hwnd, idObject, idChild); break;
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
private void OnHide(IntPtr hwnd, int idObject, int idChild)
{
// Clear last hwnd/rect variables (stop looking for dups)
_lastHwnd = hwnd;
_lastRect = _emptyRect;
}
private void OnLocationChange(IntPtr hwnd, int idObject, int idChild)
{
// Filter... send events for visible hwnds only
if (!SafeNativeMethods.IsWindowVisible(NativeMethods.HWND.Cast( hwnd )))
return;
HandleBoundingRectChange(hwnd);
}
private void HandleBoundingRectChange(IntPtr hwnd)
{
NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd );
NativeMethods.RECT rc32 = new NativeMethods.RECT(0,0,0,0);
// if GetWindwRect fails, most likely the nativeHwnd is an invalid window, so just return.
if (!Misc.GetWindowRect(nativeHwnd, out rc32))
{
return;
}
// Filter... avoid duplicate events
if (hwnd == _lastHwnd && Compare( rc32, _lastRect ))
{
return;
}
AutomationElement rawEl = AutomationElement.FromHandle(hwnd);
//
//
AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs(
AutomationElement.BoundingRectangleProperty,
Rect.Empty,
new Rect (rc32.left, rc32.top, rc32.right - rc32.left, rc32.bottom - rc32.top));
//
ClientEventManager.RaiseEventInThisClientOnly(AutomationElement.AutomationPropertyChangedEvent, rawEl, e);
// save the last hwnd/rect for filtering out duplicates
_lastHwnd = hwnd;
_lastRect = rc32;
}
//
private static bool Compare( NativeMethods.RECT rc1, NativeMethods.RECT rc2 )
{
return rc1.left == rc2.left
&& rc1.top == rc2.top
&& rc1.right == rc2.right
&& rc1.bottom == rc2.bottom;
}
#endregion Private Methods
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private static NativeMethods.RECT _emptyRect = new NativeMethods.RECT(0,0,0,0);
private NativeMethods.RECT _lastRect; // keep track of last location
private IntPtr _lastHwnd; // and hwnd for dup checking
#endregion Private Fields
}
}
// 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: Class used to send BoundingRect changes for hwnds
//
// History:
// 06/17/2003 : BrendanM Ported to WCP
//
//---------------------------------------------------------------------------
using System;
using System.Windows;
using System.Windows.Automation;
using System.Runtime.InteropServices;
using System.ComponentModel;
using MS.Win32;
namespace MS.Internal.Automation
{
// BoundingRectTracker - Class used to send BoundingRect changes for hwnds
internal class BoundingRectTracker : WinEventWrap
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
internal BoundingRectTracker()
: base(new int[]{NativeMethods.EVENT_OBJECT_LOCATIONCHANGE, NativeMethods.EVENT_OBJECT_HIDE})
{
// Intentionally not setting the callback for the base WinEventWrap since the WinEventProc override
// in this class calls RaiseEventInThisClientOnly to actually raise the event to the client.
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime)
{
// Filter... send an event for hwnd only
if ( hwnd == IntPtr.Zero || idObject != UnsafeNativeMethods.OBJID_WINDOW )
return;
switch (eventId)
{
case NativeMethods.EVENT_OBJECT_HIDE: OnHide(hwnd, idObject, idChild); break;
case NativeMethods.EVENT_OBJECT_LOCATIONCHANGE: OnLocationChange(hwnd, idObject, idChild); break;
}
}
#endregion Internal Methods
//------------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Methods
private void OnHide(IntPtr hwnd, int idObject, int idChild)
{
// Clear last hwnd/rect variables (stop looking for dups)
_lastHwnd = hwnd;
_lastRect = _emptyRect;
}
private void OnLocationChange(IntPtr hwnd, int idObject, int idChild)
{
// Filter... send events for visible hwnds only
if (!SafeNativeMethods.IsWindowVisible(NativeMethods.HWND.Cast( hwnd )))
return;
HandleBoundingRectChange(hwnd);
}
private void HandleBoundingRectChange(IntPtr hwnd)
{
NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd );
NativeMethods.RECT rc32 = new NativeMethods.RECT(0,0,0,0);
// if GetWindwRect fails, most likely the nativeHwnd is an invalid window, so just return.
if (!Misc.GetWindowRect(nativeHwnd, out rc32))
{
return;
}
// Filter... avoid duplicate events
if (hwnd == _lastHwnd && Compare( rc32, _lastRect ))
{
return;
}
AutomationElement rawEl = AutomationElement.FromHandle(hwnd);
//
//
AutomationPropertyChangedEventArgs e = new AutomationPropertyChangedEventArgs(
AutomationElement.BoundingRectangleProperty,
Rect.Empty,
new Rect (rc32.left, rc32.top, rc32.right - rc32.left, rc32.bottom - rc32.top));
//
ClientEventManager.RaiseEventInThisClientOnly(AutomationElement.AutomationPropertyChangedEvent, rawEl, e);
// save the last hwnd/rect for filtering out duplicates
_lastHwnd = hwnd;
_lastRect = rc32;
}
//
private static bool Compare( NativeMethods.RECT rc1, NativeMethods.RECT rc2 )
{
return rc1.left == rc2.left
&& rc1.top == rc2.top
&& rc1.right == rc2.right
&& rc1.bottom == rc2.bottom;
}
#endregion Private Methods
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
private static NativeMethods.RECT _emptyRect = new NativeMethods.RECT(0,0,0,0);
private NativeMethods.RECT _lastRect; // keep track of last location
private IntPtr _lastHwnd; // and hwnd for dup checking
#endregion Private Fields
}
}
// 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
- HttpStreams.cs
- ReferenceEqualityComparer.cs
- BitHelper.cs
- IFormattable.cs
- OdbcCommandBuilder.cs
- ImportContext.cs
- DocumentEventArgs.cs
- WindowsUpDown.cs
- AdornedElementPlaceholder.cs
- EvidenceBase.cs
- SupportedAddressingMode.cs
- ReferencedType.cs
- AssemblyAttributesGoHere.cs
- XsdValidatingReader.cs
- DispatchWrapper.cs
- ReadOnlyHierarchicalDataSourceView.cs
- BaseValidator.cs
- DataSourceControlBuilder.cs
- JsonDataContract.cs
- ClientBase.cs
- StateItem.cs
- Executor.cs
- BatchWriter.cs
- Regex.cs
- ScrollItemProviderWrapper.cs
- CompModSwitches.cs
- DataConnectionHelper.cs
- CodeSnippetStatement.cs
- TableLayoutColumnStyleCollection.cs
- CultureTableRecord.cs
- NotifyIcon.cs
- ObjectResult.cs
- AQNBuilder.cs
- MatrixCamera.cs
- TreeNodeBinding.cs
- InputProcessorProfilesLoader.cs
- SqlPersonalizationProvider.cs
- JapaneseCalendar.cs
- BypassElementCollection.cs
- _ConnectionGroup.cs
- ImmutableCollection.cs
- _CacheStreams.cs
- SqlVisitor.cs
- ProtocolViolationException.cs
- ConsoleCancelEventArgs.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- DescriptionAttribute.cs
- WorkflowStateRollbackService.cs
- MgmtConfigurationRecord.cs
- EditorOptionAttribute.cs
- WindowsAuthenticationModule.cs
- ApplicationCommands.cs
- PeerTransportListenAddressValidatorAttribute.cs
- Vector3DCollectionValueSerializer.cs
- JoinQueryOperator.cs
- FormView.cs
- CodeBlockBuilder.cs
- ResourceDescriptionAttribute.cs
- ScriptDescriptor.cs
- ControlBindingsCollection.cs
- COM2ExtendedUITypeEditor.cs
- SelectionRangeConverter.cs
- StringDictionary.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- LogStream.cs
- CompilerTypeWithParams.cs
- NativeMethodsCLR.cs
- DispatchChannelSink.cs
- ComplexTypeEmitter.cs
- PersonalizationEntry.cs
- SubtreeProcessor.cs
- InvalidCommandTreeException.cs
- HandlerMappingMemo.cs
- CompilerError.cs
- XmlDocument.cs
- Ray3DHitTestResult.cs
- ResourcesBuildProvider.cs
- ResXBuildProvider.cs
- WindowsEditBoxRange.cs
- MenuItemStyleCollection.cs
- TemplateEditingService.cs
- DbConnectionPoolGroupProviderInfo.cs
- VisualSerializer.cs
- NativeMethods.cs
- GraphicsPath.cs
- HtmlInputControl.cs
- DynamicExpression.cs
- OletxTransactionHeader.cs
- ModuleConfigurationInfo.cs
- FileFormatException.cs
- SQLMoneyStorage.cs
- Animatable.cs
- GridViewAutomationPeer.cs
- CheckBox.cs
- BindingSource.cs
- Matrix3D.cs
- DrawingContextDrawingContextWalker.cs
- NetworkInformationPermission.cs
- PointValueSerializer.cs
- Native.cs