Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / UIAutomationClient / MS / Internal / Automation / MenuTracker.cs / 1305600 / MenuTracker.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Class used to track context menus appearing // // History: // 3/23/2004 : preid Created // //--------------------------------------------------------------------------- using System; using System.Text; using System.Windows.Automation; using System.Diagnostics; using MS.Win32; namespace MS.Internal.Automation { internal delegate void MenuHandler( AutomationElement rawEl, bool menuHasOpened ); // MenuOpened - Class used to track context menus appearing internal class MenuTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal MenuTracker(MenuHandler newHandler) : base(new int[] {NativeMethods.EVENT_SYSTEM_MENUPOPUPSTART, NativeMethods.EVENT_SYSTEM_MENUPOPUPEND}) { AddCallback(newHandler); } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime) { AutomationElement rawEl = null; bool menuHasOpened = eventId == NativeMethods.EVENT_SYSTEM_MENUPOPUPSTART; // Only create a raw element wrapper if the menu has popped up. Send a // null element for menu closed (the element isn't available anymore). // if( menuHasOpened ) { // Ignore if this is a bogus hwnd (shouldn't happen) if( hwnd == IntPtr.Zero ) return; NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd ); if( !SafeNativeMethods.IsWindow( nativeHwnd ) ) return; // Filter... send events for visible hwnds only if( !SafeNativeMethods.IsWindowVisible( nativeHwnd ) ) return; rawEl = AutomationElement.FromHandle( hwnd ); } // Do callback. This handler is called due to a WinEvent on the client. The handler // is going to hand off the work of calling out to the client code to another thread // via a queue so it is safe to do this callback w/in the lock. object [] handlers = GetHandlers(); Debug.Assert(handlers.Length <= 1, "handlers.Length"); if( handlers.Length > 0 ) ( ( MenuHandler )handlers[0] )( rawEl, menuHasOpened ); } #endregion Internal Methods } } // 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 track context menus appearing // // History: // 3/23/2004 : preid Created // //--------------------------------------------------------------------------- using System; using System.Text; using System.Windows.Automation; using System.Diagnostics; using MS.Win32; namespace MS.Internal.Automation { internal delegate void MenuHandler( AutomationElement rawEl, bool menuHasOpened ); // MenuOpened - Class used to track context menus appearing internal class MenuTracker : WinEventWrap { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal MenuTracker(MenuHandler newHandler) : base(new int[] {NativeMethods.EVENT_SYSTEM_MENUPOPUPSTART, NativeMethods.EVENT_SYSTEM_MENUPOPUPEND}) { AddCallback(newHandler); } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods internal override void WinEventProc(int eventId, IntPtr hwnd, int idObject, int idChild, uint eventTime) { AutomationElement rawEl = null; bool menuHasOpened = eventId == NativeMethods.EVENT_SYSTEM_MENUPOPUPSTART; // Only create a raw element wrapper if the menu has popped up. Send a // null element for menu closed (the element isn't available anymore). // if( menuHasOpened ) { // Ignore if this is a bogus hwnd (shouldn't happen) if( hwnd == IntPtr.Zero ) return; NativeMethods.HWND nativeHwnd = NativeMethods.HWND.Cast( hwnd ); if( !SafeNativeMethods.IsWindow( nativeHwnd ) ) return; // Filter... send events for visible hwnds only if( !SafeNativeMethods.IsWindowVisible( nativeHwnd ) ) return; rawEl = AutomationElement.FromHandle( hwnd ); } // Do callback. This handler is called due to a WinEvent on the client. The handler // is going to hand off the work of calling out to the client code to another thread // via a queue so it is safe to do this callback w/in the lock. object [] handlers = GetHandlers(); Debug.Assert(handlers.Length <= 1, "handlers.Length"); if( handlers.Length > 0 ) ( ( MenuHandler )handlers[0] )( rawEl, menuHasOpened ); } #endregion Internal Methods } } // 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
- LinqMaximalSubtreeNominator.cs
- XmlArrayItemAttributes.cs
- CompilerGeneratedAttribute.cs
- Graphics.cs
- DesignerOptionService.cs
- Gdiplus.cs
- AsymmetricKeyExchangeDeformatter.cs
- SoapExtensionImporter.cs
- EntityDataSourceViewSchema.cs
- ScriptModule.cs
- MultiplexingDispatchMessageFormatter.cs
- DataFormats.cs
- DBSchemaTable.cs
- ListParaClient.cs
- TimeZone.cs
- ImmutableClientRuntime.cs
- IntAverageAggregationOperator.cs
- DesignTimeVisibleAttribute.cs
- SqlHelper.cs
- ChangeToolStripParentVerb.cs
- MenuItemStyle.cs
- StaticExtensionConverter.cs
- DispatcherExceptionFilterEventArgs.cs
- ImageConverter.cs
- HandlerBase.cs
- DbProviderFactories.cs
- EntitySetBase.cs
- OpenTypeLayoutCache.cs
- ColumnMapProcessor.cs
- IDispatchConstantAttribute.cs
- InvokeGenerator.cs
- ListItem.cs
- BitConverter.cs
- TemplateField.cs
- FileEnumerator.cs
- DrawingGroup.cs
- FocusChangedEventArgs.cs
- MeshGeometry3D.cs
- TextEditorParagraphs.cs
- RoleManagerModule.cs
- Compress.cs
- DataGridViewControlCollection.cs
- ProfileSection.cs
- UncommonField.cs
- DispatcherHooks.cs
- DriveInfo.cs
- util.cs
- ReadOnlyTernaryTree.cs
- altserialization.cs
- LabelLiteral.cs
- HttpResponse.cs
- OrthographicCamera.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- BasicDesignerLoader.cs
- ZipIOModeEnforcingStream.cs
- DemultiplexingClientMessageFormatter.cs
- PtsContext.cs
- ConnectionManagementElement.cs
- SqlXml.cs
- SecureStringHasher.cs
- XmlSchemaComplexType.cs
- XhtmlBasicCommandAdapter.cs
- RenderCapability.cs
- XmlAttributeCollection.cs
- EditorPartChrome.cs
- MetadataItemCollectionFactory.cs
- ParseHttpDate.cs
- DbConnectionPool.cs
- MatrixStack.cs
- TextElementCollectionHelper.cs
- ResumeStoryboard.cs
- VisualStyleRenderer.cs
- PeerCustomResolverSettings.cs
- BrowserCapabilitiesCompiler.cs
- AssociativeAggregationOperator.cs
- EndpointAddressMessageFilterTable.cs
- VectorAnimationBase.cs
- Item.cs
- CatalogPartCollection.cs
- FeatureSupport.cs
- RemotingAttributes.cs
- ExternalFile.cs
- TdsValueSetter.cs
- DocumentationServerProtocol.cs
- ActivitySurrogateSelector.cs
- COAUTHINFO.cs
- DataRow.cs
- BitmapEffectDrawingContent.cs
- JsonXmlDataContract.cs
- InstanceDescriptor.cs
- EventlogProvider.cs
- safemediahandle.cs
- XmlSignatureManifest.cs
- _NestedSingleAsyncResult.cs
- AsyncContentLoadedEventArgs.cs
- IFormattable.cs
- SystemEvents.cs
- OdbcConnectionStringbuilder.cs
- QueueProcessor.cs
- DataGrid.cs