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
- PageCodeDomTreeGenerator.cs
- ObjectAnimationBase.cs
- DataGridCaption.cs
- Decoder.cs
- ReaderWriterLockSlim.cs
- CachingParameterInspector.cs
- DispatcherHooks.cs
- TableProviderWrapper.cs
- XmlSerializerVersionAttribute.cs
- FontFamily.cs
- SRDisplayNameAttribute.cs
- EntityDataSourceContainerNameItem.cs
- DecoderExceptionFallback.cs
- DBSqlParserColumn.cs
- ReflectionUtil.cs
- SafeCryptHandles.cs
- Rectangle.cs
- RelationshipConstraintValidator.cs
- Rotation3DKeyFrameCollection.cs
- XsltContext.cs
- GenericPrincipal.cs
- ProfileEventArgs.cs
- StorageTypeMapping.cs
- DataControlFieldsEditor.cs
- IndexOutOfRangeException.cs
- ValueSerializerAttribute.cs
- WindowsButton.cs
- PrintControllerWithStatusDialog.cs
- OrderedDictionary.cs
- CheckoutException.cs
- InvariantComparer.cs
- UniqueEventHelper.cs
- DocumentPage.cs
- PropertyDescriptorCollection.cs
- activationcontext.cs
- TypeTypeConverter.cs
- SimpleTextLine.cs
- ObjectDataProvider.cs
- ContainerFilterService.cs
- SqlTypeConverter.cs
- TextDecoration.cs
- XmlResolver.cs
- ForceCopyBuildProvider.cs
- TraceListener.cs
- LOSFormatter.cs
- ConnectionPoint.cs
- IgnoreFileBuildProvider.cs
- StsCommunicationException.cs
- NativeMethods.cs
- HtmlImage.cs
- OleDbEnumerator.cs
- Timer.cs
- ListBindingHelper.cs
- EntityDataSourceWrapper.cs
- AppSettingsSection.cs
- ContentValidator.cs
- ReplacementText.cs
- PeerOutputChannel.cs
- FacetDescription.cs
- SafeFileHandle.cs
- ErrorFormatterPage.cs
- PriorityBindingExpression.cs
- BamlReader.cs
- ServiceKnownTypeAttribute.cs
- SmtpAuthenticationManager.cs
- ButtonPopupAdapter.cs
- ProfileGroupSettingsCollection.cs
- DataGridViewSortCompareEventArgs.cs
- OpacityConverter.cs
- TextProperties.cs
- AsyncResult.cs
- WebPartTracker.cs
- securitycriticaldata.cs
- AddInToken.cs
- OleDbInfoMessageEvent.cs
- TrackingRecord.cs
- TargetException.cs
- ListViewDataItem.cs
- HelpProvider.cs
- ExpandSegment.cs
- PageCatalogPartDesigner.cs
- BlobPersonalizationState.cs
- OverflowException.cs
- StatusBarItemAutomationPeer.cs
- ComponentEditorPage.cs
- ToolStripDropTargetManager.cs
- ResourceReferenceExpressionConverter.cs
- webeventbuffer.cs
- WebPartTransformerCollection.cs
- CompositeCollection.cs
- _ListenerAsyncResult.cs
- SimpleHandlerFactory.cs
- SHA384.cs
- IOException.cs
- MatrixTransform3D.cs
- FontFamilyValueSerializer.cs
- SkewTransform.cs
- SQLDoubleStorage.cs
- HttpDebugHandler.cs
- BufferedStream.cs