Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsListViewItemStartMenu.cs / 1305600 / 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.
//----------------------------------------------------------------------------
//
//
// 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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeneralTransform3D.cs
- TraceData.cs
- OdbcDataReader.cs
- RichTextBoxAutomationPeer.cs
- StreamGeometry.cs
- VerificationAttribute.cs
- StringOutput.cs
- ConnectionPoint.cs
- OracleBoolean.cs
- PartitionedStream.cs
- TypeToArgumentTypeConverter.cs
- FontInfo.cs
- AllowedAudienceUriElement.cs
- XmlCharacterData.cs
- ExpressionBindings.cs
- RotateTransform.cs
- ScopedKnownTypes.cs
- DeclarativeCatalogPartDesigner.cs
- PeoplePickerWrapper.cs
- Brushes.cs
- CodeMemberEvent.cs
- LineSegment.cs
- BaseParser.cs
- TabControlAutomationPeer.cs
- DesignerTransaction.cs
- GenericIdentity.cs
- CodeThrowExceptionStatement.cs
- ConnectionPointCookie.cs
- PropertyPathWorker.cs
- lengthconverter.cs
- NTAccount.cs
- DecimalAnimation.cs
- XPathNodePointer.cs
- DetailsViewModeEventArgs.cs
- BookmarkScopeInfo.cs
- Ipv6Element.cs
- Schema.cs
- FaultDesigner.cs
- QilLoop.cs
- DuplicateWaitObjectException.cs
- SqlUserDefinedAggregateAttribute.cs
- SqlRecordBuffer.cs
- Int16AnimationUsingKeyFrames.cs
- GenericEnumConverter.cs
- SerializationFieldInfo.cs
- ListSourceHelper.cs
- ContentType.cs
- PropertyMetadata.cs
- __FastResourceComparer.cs
- PrintDialog.cs
- FunctionOverloadResolver.cs
- SoapSchemaExporter.cs
- DataGridViewButtonCell.cs
- ResourceReferenceExpression.cs
- HttpAsyncResult.cs
- METAHEADER.cs
- XmlnsDictionary.cs
- BufferedOutputStream.cs
- GridItem.cs
- ConnectionManagementElement.cs
- HostedTransportConfigurationBase.cs
- BaseTreeIterator.cs
- cryptoapiTransform.cs
- odbcmetadatafactory.cs
- References.cs
- XmlAttributeOverrides.cs
- Baml2006KeyRecord.cs
- SourceItem.cs
- TextTreeDeleteContentUndoUnit.cs
- RTLAwareMessageBox.cs
- ColumnMap.cs
- HideDisabledControlAdapter.cs
- AtomMaterializerLog.cs
- PermissionSet.cs
- UrlMapping.cs
- IgnoreSectionHandler.cs
- XPathCompileException.cs
- MouseCaptureWithinProperty.cs
- CryptoApi.cs
- StrongNameKeyPair.cs
- RefType.cs
- PixelFormat.cs
- MemberNameValidator.cs
- Msec.cs
- CurrentChangedEventManager.cs
- FormViewUpdatedEventArgs.cs
- StylusCaptureWithinProperty.cs
- ICspAsymmetricAlgorithm.cs
- __Error.cs
- GroupByExpressionRewriter.cs
- ModelItemCollection.cs
- ProcessStartInfo.cs
- ImageField.cs
- CompilationUnit.cs
- ExternalFile.cs
- EmissiveMaterial.cs
- OneWayBindingElement.cs
- Publisher.cs
- FlowLayoutSettings.cs
- FontFamily.cs