Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / BoundingRectTracker.cs / 1305600 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SecurityTokenValidationException.cs
- Accessible.cs
- Misc.cs
- HtmlEmptyTagControlBuilder.cs
- UserNameSecurityToken.cs
- TextBoxLine.cs
- cache.cs
- rsa.cs
- FilteredDataSetHelper.cs
- AttachmentService.cs
- SimpleParser.cs
- WebPartCatalogCloseVerb.cs
- DeobfuscatingStream.cs
- XmlAttribute.cs
- ClientUtils.cs
- AdornerPresentationContext.cs
- GeometryModel3D.cs
- PipelineModuleStepContainer.cs
- Encoder.cs
- Emitter.cs
- RowToFieldTransformer.cs
- StrongNameUtility.cs
- Evaluator.cs
- CryptoConfig.cs
- EraserBehavior.cs
- TCPClient.cs
- TreeWalker.cs
- CommentGlyph.cs
- DataGridLinkButton.cs
- EntityViewGenerationAttribute.cs
- CommandID.cs
- SafeFileHandle.cs
- SettingsContext.cs
- DeferredReference.cs
- PeerToPeerException.cs
- OleDbErrorCollection.cs
- SmiConnection.cs
- ParserContext.cs
- TypeConverterAttribute.cs
- PropertyValueChangedEvent.cs
- SerTrace.cs
- SafeRightsManagementQueryHandle.cs
- WinEventHandler.cs
- DesignTimeValidationFeature.cs
- GroupBoxAutomationPeer.cs
- Stylus.cs
- ActivityContext.cs
- RadioButton.cs
- WindowsListBox.cs
- Viewport2DVisual3D.cs
- SqlDuplicator.cs
- DebugInfoGenerator.cs
- NotifyCollectionChangedEventArgs.cs
- HealthMonitoringSectionHelper.cs
- Duration.cs
- XmlSortKey.cs
- GridView.cs
- MessageQueuePermissionEntryCollection.cs
- AuthenticationModuleElementCollection.cs
- TcpClientChannel.cs
- FlowLayout.cs
- ScriptRef.cs
- FontCollection.cs
- CollectionType.cs
- FormView.cs
- EastAsianLunisolarCalendar.cs
- WindowsClaimSet.cs
- translator.cs
- MobileTemplatedControlDesigner.cs
- PeerTransportSecurityElement.cs
- IISUnsafeMethods.cs
- ToolboxItemAttribute.cs
- TraceSource.cs
- Events.cs
- DesignOnlyAttribute.cs
- TransformedBitmap.cs
- SubordinateTransaction.cs
- LinearGradientBrush.cs
- SequentialUshortCollection.cs
- MaxMessageSizeStream.cs
- DeviceContexts.cs
- InvalidAsynchronousStateException.cs
- InkCanvas.cs
- ContainerSelectorGlyph.cs
- EnumUnknown.cs
- DetailsView.cs
- WebPartMinimizeVerb.cs
- errorpatternmatcher.cs
- RemotingServices.cs
- BitmapFrameDecode.cs
- GenericTypeParameterConverter.cs
- DeflateStream.cs
- IDQuery.cs
- X509ImageLogo.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- ListManagerBindingsCollection.cs
- Metadata.cs
- ErrorReporting.cs
- ResolveMatchesCD1.cs
- XmlTextReaderImpl.cs