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
- AppSecurityManager.cs
- TextProviderWrapper.cs
- Trace.cs
- PipeStream.cs
- DynamicDataExtensions.cs
- autovalidator.cs
- SlotInfo.cs
- DragDrop.cs
- WindowsFormsHelpers.cs
- StrokeCollection2.cs
- CacheRequest.cs
- FormsAuthenticationModule.cs
- StorageEndPropertyMapping.cs
- SpecialNameAttribute.cs
- WebPartCancelEventArgs.cs
- DesignerLoader.cs
- ValidationSummary.cs
- SqlWebEventProvider.cs
- ExpressionVisitor.cs
- SqlAggregateChecker.cs
- DesignTimeParseData.cs
- X509ScopedServiceCertificateElementCollection.cs
- BoundingRectTracker.cs
- LayoutTableCell.cs
- MexServiceChannelBuilder.cs
- MetadataArtifactLoaderResource.cs
- WSDualHttpSecurityElement.cs
- ColumnMapCopier.cs
- ComplexTypeEmitter.cs
- SqlClientWrapperSmiStreamChars.cs
- WebPartCatalogAddVerb.cs
- CompressStream.cs
- CursorEditor.cs
- WpfGeneratedKnownProperties.cs
- DifferencingCollection.cs
- MarkupWriter.cs
- ConvertBinder.cs
- ExpressionConverter.cs
- DocumentEventArgs.cs
- ValidatingPropertiesEventArgs.cs
- WebPartEditorApplyVerb.cs
- ExpressionsCollectionEditor.cs
- DateTimeValueSerializer.cs
- AncestorChangedEventArgs.cs
- CompilerGlobalScopeAttribute.cs
- CompilerCollection.cs
- TypeUtil.cs
- WmlTextViewAdapter.cs
- SqlLiftWhereClauses.cs
- FunctionQuery.cs
- WindowsStartMenu.cs
- DataFormats.cs
- SignatureGenerator.cs
- CodeAttachEventStatement.cs
- AutomationPatternInfo.cs
- PropertyKey.cs
- BasicCellRelation.cs
- ClosureBinding.cs
- DesignerView.cs
- ArgumentOutOfRangeException.cs
- TemplateInstanceAttribute.cs
- WebDescriptionAttribute.cs
- RbTree.cs
- SingleSelectRootGridEntry.cs
- DirectoryNotFoundException.cs
- WorkflowViewService.cs
- FixedDocumentSequencePaginator.cs
- CommonRemoteMemoryBlock.cs
- LinqExpressionNormalizer.cs
- CodeVariableDeclarationStatement.cs
- QilReplaceVisitor.cs
- GZipDecoder.cs
- NavigationFailedEventArgs.cs
- TransactionFilter.cs
- RoleService.cs
- PropertyContainer.cs
- ReachFixedDocumentSerializer.cs
- LinqDataSourceContextEventArgs.cs
- ProgressBarBrushConverter.cs
- QueryStringParameter.cs
- TriggerAction.cs
- CustomCategoryAttribute.cs
- DataKeyArray.cs
- SessionStateUtil.cs
- AcceleratedTokenAuthenticator.cs
- RecognitionEventArgs.cs
- SystemIcons.cs
- HtmlControl.cs
- NonBatchDirectoryCompiler.cs
- BufferedReadStream.cs
- ValuePatternIdentifiers.cs
- PropertyGridEditorPart.cs
- WebServiceReceiveDesigner.cs
- ExpressionNode.cs
- DateTimeSerializationSection.cs
- Utils.cs
- VirtualDirectoryMappingCollection.cs
- FixedSOMSemanticBox.cs
- AnonymousIdentificationSection.cs
- HttpStreamFormatter.cs