WindowsListViewItemStartMenu.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / AccessibleTech / longhorn / Automation / Win32Providers / MS / Internal / AutomationProxies / WindowsListViewItemStartMenu.cs / 1 / WindowsListViewItemStartMenu.cs

                            //---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// 
// Description: Win32 ListView Item proxy for the Start Menu. 
//      The Start Menu has a special use of ListViews.  The items in the
//      list are treated like menuitems.  To expose this special behavor 
//      data from MSAA is need. The Shell team has implemented a special
//      IAccessible to support the Sart Menu.
//
// History: 
//        2005/01/25 - [....] - Created
// 
//--------------------------------------------------------------------------- 

using System; 
using System.ComponentModel;
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System.Windows; 
using Accessibility;
using MS.Win32; 
 
namespace MS.Internal.AutomationProxies
{ 
    // This class will only change a couple of aspects of a ListViewItem.  So derive from the ListViewItem to
    // retain the majority of the ListView item functionality.
    internal class ListViewItemStartMenu : ListViewItem
    { 
        // -----------------------------------------------------
        // 
        //  Constructors 
        //
        //----------------------------------------------------- 

        #region Constructors

        internal ListViewItemStartMenu(IntPtr hwnd, ProxyFragment parent, int item, IAccessible acc) 
            : base (hwnd, parent, item)
        { 
            // The items are zero based, i.e. the first listview item is item 0.  The 
            // zero item in MSAA is self, so need to add one to the item to get the
            // correct Accessible child. 
            AccessibleRole role = Accessible.GetRole(acc, item + 1);

            // Normal Listview items should be of control type listitem.  But
            // the Listview items in the Start Menu act like menuitems.  Get the Role 
            // from IAccessible interface implemented by the Shell team and set the
            // control type. 
            if (role == AccessibleRole.MenuItem) 
            {
                _cControlType = ControlType.MenuItem; 
            }
            else
            {
                System.Diagnostics.Debug.Assert(false, "The listview item on the Start Menu has an unexpected IAccessible role!"); 
            }
        } 
 
        #endregion Constructos
 
        //------------------------------------------------------
        //
        //  Patterns Implementation
        // 
        //-----------------------------------------------------
 
        #region ProxySimple Interface 

        // Returns a pattern interface if supported. 
        internal override object GetPatternProvider(AutomationPattern iid)
        {
            // Treate these listview items as menuitems and only support Invoke or Expand/Collapse patterns.
            // Invoke Pattern needs to be supported when the item has no children.  When the item does have 
            // children it needs to support ExpandCollapse Pattern.
 
            if (iid == InvokePattern.Pattern) 
            {
                return this; 
            }

            //
 
            return null;
        } 
 
        // Process all the Logical and Raw Element Properties
        internal override object GetElementProperty(AutomationProperty idProp) 
        {
            // Normal Listview items do not have a concept of an AccessKey.  But
            // the Listview items in the Start Menu does.  This information is
            // in the IAccessible interface implemented by the Shell team. 
            if (idProp == AutomationElement.AccessKeyProperty)
            { 
                // The IAccessible should be valid here since it is the cached value in ProxySimple. 
                System.Diagnostics.Debug.Assert(AccessibleObject != null, "Failed to get a valid IAccessible!");
 
                try
                {
                    string key = AccessibleObject.get_accKeyboardShortcut(_item + 1);
                    if (!string.IsNullOrEmpty(key)) 
                    {
                        return ST.Get(STID.KeyAlt) + "+" + key; 
                    } 
                }
                catch (Exception e) 
                {
                    if (Misc.IsCriticalException(e))
                    {
                        throw; 
                    }
                } 
            } 
            else if (idProp == AutomationElement.HasKeyboardFocusProperty)
            { 
                return IsFocused();
            }

 
            return base.GetElementProperty(idProp);
        } 
 
        #endregion
    } 

}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK