Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsListViewItemCheckBox.cs / 1 / WindowsListViewItemCheckBox.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Win32 ListViewItemCheckbox proxy // // History: // alexsn - Created (in DotNet) // 2003/08/12 - alexsn Updated for WCP // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using System.Runtime.InteropServices; using MS.Win32; namespace MS.Internal.AutomationProxies { class ListViewItemCheckbox: ProxySimple, IToggleProvider { // ----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal ListViewItemCheckbox (IntPtr hwnd, ProxyFragment parent, int item, int checkbox) : base (hwnd, parent, checkbox) { _cControlType = ControlType.CheckBox; _listviewItem = item; } #endregion Constructors //------------------------------------------------------ // // Patterns Implementation // //----------------------------------------------------- #region ProxySimple Interface // Returns a pattern interface if supported. internal override object GetPatternProvider (AutomationPattern iid) { if (iid == TogglePattern.Pattern) { return this; } return null; } // Gets the bounding rectangle for this element internal override Rect BoundingRectangle { get { return ListViewCheckBoxRect(_hwnd, _listviewItem).ToRect(Misc.IsControlRTL(_hwnd)); } } // Process all the Element Properties internal override object GetElementProperty(AutomationProperty idProp) { if (idProp == AutomationElement.IsOffscreenProperty) { Rect parentRect = GetParent().BoundingRectangle; NativeMethods.Win32Rect itemRect = ListViewCheckBoxRect(_hwnd, _listviewItem); if (itemRect.IsEmpty || parentRect.IsEmpty) { return true; } if (Misc.MapWindowPoints(_hwnd, IntPtr.Zero, ref itemRect, 2) && !Misc.IsItemVisible(ref parentRect, ref itemRect)) { return true; } } // EventManager.DispatchEvent() genericaly uses GetElementProperty() // to get properties during a property change event. Proccess ToggleStateProperty // so the ToggleStateProperty Change Event can get the correct state. else if (idProp == TogglePattern.ToggleStateProperty) { return ((IToggleProvider)this).ToggleState; } return base.GetElementProperty(idProp); } //Gets the controls help text internal override string HelpText { get { return WindowsListView.GetItemToolTipText(_hwnd); } } //Gets the localized name internal override string LocalizedName { get { string name = ListViewItem.GetText(_hwnd, _listviewItem, 0); return name.Length < Misc.MaxLengthNameProperty ? name : name.Substring(0, Misc.MaxLengthNameProperty); } } #endregion ProxySimple Interface #region IToggleProvider void IToggleProvider.Toggle() { // check or uncheck the checkbox Toggle(); } ToggleState IToggleProvider.ToggleState { get { return GetToggleState(); } } #endregion IToggleProvider //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods // retrieve bounding rectangle of the listview checkbox internal static NativeMethods.Win32Rect ListViewCheckBoxRect (IntPtr hwnd, int item) { // Rare special case if (WindowsListView.FullRowSelect (hwnd) && WindowsListView.IsDetailMode (hwnd)) { // Get listview window rect NativeMethods.Win32Rect controlRectangle = NativeMethods.Win32Rect.Empty; if (!Misc.GetWindowRect(hwnd, ref controlRectangle)) { return NativeMethods.Win32Rect.Empty; } // BOUNDS == SELECTBOUNDS, hence cannot rely on them // will rely on the ICON or LABEL // Try icon first since it is the closest to the checkbox NativeMethods.Win32Rect rc; if ((WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_ICON, out rc) && rc.left != rc.right) || (WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_LABEL, out rc) && rc.left != rc.right)) { int right = controlRectangle.left + (rc.left - controlRectangle.left); return new NativeMethods.Win32Rect (controlRectangle.left, rc.top, right, rc.bottom); } } else { // Very common, simple case NativeMethods.Win32Rect wholeItem; if (!WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_BOUNDS, out wholeItem)) { return NativeMethods.Win32Rect.Empty; } NativeMethods.Win32Rect selectable; if (!WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_SELECTBOUNDS, out selectable)) { return NativeMethods.Win32Rect.Empty; } return new NativeMethods.Win32Rect (wholeItem.left, wholeItem.top, selectable.left, wholeItem.bottom); } return NativeMethods.Win32Rect.Empty; } #endregion Internal Methods //----------------------------------------------------- // // Private Methods // //------------------------------------------------------ #region Private Methods // retrieve current ToggleState private ToggleState GetToggleState () { ListViewItem.CheckState current = (ListViewItem.CheckState) WindowsListView.GetCheckedState (_hwnd, _listviewItem); switch (current) { case ListViewItem.CheckState.NoCheckbox : { throw new InvalidOperationException(SR.Get(SRID.OperationCannotBePerformed)); } case ListViewItem.CheckState.Checked : { return ToggleState.On; } case ListViewItem.CheckState.Unchecked : { return ToggleState.Off; } } // developer defined custom values which cannot be interpret outside of the app's scope return ToggleState.Indeterminate; } private void Toggle() { // Make sure that the control is enabled if (!SafeNativeMethods.IsWindowEnabled(_hwnd)) { throw new ElementNotEnabledException(); } Misc.SetFocus(_hwnd); NativeMethods.Win32Rect rc = ListViewCheckBoxRect(_hwnd, _listviewItem); NativeMethods.Win32Point pt = new NativeMethods.Win32Point((rc.left + rc.right) / 2, (rc.top + rc.bottom) / 2); if (Misc.MapWindowPoints(IntPtr.Zero, _hwnd, ref pt, 1)) { // "click" on the checkbox Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONDOWN, (IntPtr)NativeMethods.MK_LBUTTON, NativeMethods.Util.MAKELPARAM(pt.x, pt.y)); Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONUP, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(pt.x, pt.y)); } } #endregion Private Methods //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields private int _listviewItem; #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: Win32 ListViewItemCheckbox proxy // // History: // alexsn - Created (in DotNet) // 2003/08/12 - alexsn Updated for WCP // //--------------------------------------------------------------------------- using System; using System.ComponentModel; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using System.Runtime.InteropServices; using MS.Win32; namespace MS.Internal.AutomationProxies { class ListViewItemCheckbox: ProxySimple, IToggleProvider { // ----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal ListViewItemCheckbox (IntPtr hwnd, ProxyFragment parent, int item, int checkbox) : base (hwnd, parent, checkbox) { _cControlType = ControlType.CheckBox; _listviewItem = item; } #endregion Constructors //------------------------------------------------------ // // Patterns Implementation // //----------------------------------------------------- #region ProxySimple Interface // Returns a pattern interface if supported. internal override object GetPatternProvider (AutomationPattern iid) { if (iid == TogglePattern.Pattern) { return this; } return null; } // Gets the bounding rectangle for this element internal override Rect BoundingRectangle { get { return ListViewCheckBoxRect(_hwnd, _listviewItem).ToRect(Misc.IsControlRTL(_hwnd)); } } // Process all the Element Properties internal override object GetElementProperty(AutomationProperty idProp) { if (idProp == AutomationElement.IsOffscreenProperty) { Rect parentRect = GetParent().BoundingRectangle; NativeMethods.Win32Rect itemRect = ListViewCheckBoxRect(_hwnd, _listviewItem); if (itemRect.IsEmpty || parentRect.IsEmpty) { return true; } if (Misc.MapWindowPoints(_hwnd, IntPtr.Zero, ref itemRect, 2) && !Misc.IsItemVisible(ref parentRect, ref itemRect)) { return true; } } // EventManager.DispatchEvent() genericaly uses GetElementProperty() // to get properties during a property change event. Proccess ToggleStateProperty // so the ToggleStateProperty Change Event can get the correct state. else if (idProp == TogglePattern.ToggleStateProperty) { return ((IToggleProvider)this).ToggleState; } return base.GetElementProperty(idProp); } //Gets the controls help text internal override string HelpText { get { return WindowsListView.GetItemToolTipText(_hwnd); } } //Gets the localized name internal override string LocalizedName { get { string name = ListViewItem.GetText(_hwnd, _listviewItem, 0); return name.Length < Misc.MaxLengthNameProperty ? name : name.Substring(0, Misc.MaxLengthNameProperty); } } #endregion ProxySimple Interface #region IToggleProvider void IToggleProvider.Toggle() { // check or uncheck the checkbox Toggle(); } ToggleState IToggleProvider.ToggleState { get { return GetToggleState(); } } #endregion IToggleProvider //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods // retrieve bounding rectangle of the listview checkbox internal static NativeMethods.Win32Rect ListViewCheckBoxRect (IntPtr hwnd, int item) { // Rare special case if (WindowsListView.FullRowSelect (hwnd) && WindowsListView.IsDetailMode (hwnd)) { // Get listview window rect NativeMethods.Win32Rect controlRectangle = NativeMethods.Win32Rect.Empty; if (!Misc.GetWindowRect(hwnd, ref controlRectangle)) { return NativeMethods.Win32Rect.Empty; } // BOUNDS == SELECTBOUNDS, hence cannot rely on them // will rely on the ICON or LABEL // Try icon first since it is the closest to the checkbox NativeMethods.Win32Rect rc; if ((WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_ICON, out rc) && rc.left != rc.right) || (WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_LABEL, out rc) && rc.left != rc.right)) { int right = controlRectangle.left + (rc.left - controlRectangle.left); return new NativeMethods.Win32Rect (controlRectangle.left, rc.top, right, rc.bottom); } } else { // Very common, simple case NativeMethods.Win32Rect wholeItem; if (!WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_BOUNDS, out wholeItem)) { return NativeMethods.Win32Rect.Empty; } NativeMethods.Win32Rect selectable; if (!WindowsListView.GetItemRect(hwnd, item, NativeMethods.LVIR_SELECTBOUNDS, out selectable)) { return NativeMethods.Win32Rect.Empty; } return new NativeMethods.Win32Rect (wholeItem.left, wholeItem.top, selectable.left, wholeItem.bottom); } return NativeMethods.Win32Rect.Empty; } #endregion Internal Methods //----------------------------------------------------- // // Private Methods // //------------------------------------------------------ #region Private Methods // retrieve current ToggleState private ToggleState GetToggleState () { ListViewItem.CheckState current = (ListViewItem.CheckState) WindowsListView.GetCheckedState (_hwnd, _listviewItem); switch (current) { case ListViewItem.CheckState.NoCheckbox : { throw new InvalidOperationException(SR.Get(SRID.OperationCannotBePerformed)); } case ListViewItem.CheckState.Checked : { return ToggleState.On; } case ListViewItem.CheckState.Unchecked : { return ToggleState.Off; } } // developer defined custom values which cannot be interpret outside of the app's scope return ToggleState.Indeterminate; } private void Toggle() { // Make sure that the control is enabled if (!SafeNativeMethods.IsWindowEnabled(_hwnd)) { throw new ElementNotEnabledException(); } Misc.SetFocus(_hwnd); NativeMethods.Win32Rect rc = ListViewCheckBoxRect(_hwnd, _listviewItem); NativeMethods.Win32Point pt = new NativeMethods.Win32Point((rc.left + rc.right) / 2, (rc.top + rc.bottom) / 2); if (Misc.MapWindowPoints(IntPtr.Zero, _hwnd, ref pt, 1)) { // "click" on the checkbox Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONDOWN, (IntPtr)NativeMethods.MK_LBUTTON, NativeMethods.Util.MAKELPARAM(pt.x, pt.y)); Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONUP, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(pt.x, pt.y)); } } #endregion Private Methods //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields private int _listviewItem; #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
- RC2CryptoServiceProvider.cs
- XmlUrlResolver.cs
- PropertyChangedEventArgs.cs
- SessionEndingCancelEventArgs.cs
- RestHandlerFactory.cs
- ValidationErrorInfo.cs
- UIElement3D.cs
- CodeAttachEventStatement.cs
- FlowDocument.cs
- PreservationFileReader.cs
- LayoutEditorPart.cs
- HttpApplicationFactory.cs
- ButtonBaseAdapter.cs
- WindowsFormsSynchronizationContext.cs
- Quaternion.cs
- SelectionEditor.cs
- BackStopAuthenticationModule.cs
- MsmqIntegrationChannelListener.cs
- WorkflowServiceBehavior.cs
- PerformanceCounterNameAttribute.cs
- TextEndOfLine.cs
- MediaCommands.cs
- PathFigureCollectionConverter.cs
- DataViewListener.cs
- ModulesEntry.cs
- XPathParser.cs
- ColumnClickEvent.cs
- CollectionViewSource.cs
- GradientStopCollection.cs
- SiteMapSection.cs
- SqlEnums.cs
- ByteViewer.cs
- SmiEventSink.cs
- JsonReader.cs
- DataControlFieldCollection.cs
- DiscoveryCallbackBehavior.cs
- AnimatedTypeHelpers.cs
- SwitchExpression.cs
- BitmapEffectInputData.cs
- BitmapMetadata.cs
- IncrementalCompileAnalyzer.cs
- ClassGenerator.cs
- XsltInput.cs
- XamlParser.cs
- ComponentDispatcher.cs
- BaseResourcesBuildProvider.cs
- DataGridClipboardCellContent.cs
- QueryStringConverter.cs
- SectionVisual.cs
- SqlLiftIndependentRowExpressions.cs
- XslUrlEditor.cs
- ParenthesizePropertyNameAttribute.cs
- SqlDataSourceStatusEventArgs.cs
- ClientRuntimeConfig.cs
- XmlLanguageConverter.cs
- SQLDecimal.cs
- Imaging.cs
- contentDescriptor.cs
- EmptyWorkItem.cs
- ToolboxBitmapAttribute.cs
- MaskedTextBoxTextEditor.cs
- basevalidator.cs
- ProtocolsSection.cs
- StringFunctions.cs
- XmlToDatasetMap.cs
- BoolExpressionVisitors.cs
- XamlToRtfParser.cs
- NullableDoubleSumAggregationOperator.cs
- InternalsVisibleToAttribute.cs
- PropertyItemInternal.cs
- PlainXmlWriter.cs
- RoleService.cs
- CopyEncoder.cs
- CheckBoxFlatAdapter.cs
- SystemFonts.cs
- SEHException.cs
- MapPathBasedVirtualPathProvider.cs
- RootNamespaceAttribute.cs
- Soap.cs
- TextTrailingCharacterEllipsis.cs
- CodeParameterDeclarationExpression.cs
- HttpsHostedTransportConfiguration.cs
- SqlUtils.cs
- NamedServiceModelExtensionCollectionElement.cs
- SubclassTypeValidatorAttribute.cs
- SynchronizedInputPattern.cs
- OdbcConnection.cs
- DynamicArgumentDialog.cs
- Style.cs
- Subordinate.cs
- Automation.cs
- BlobPersonalizationState.cs
- ContextActivityUtils.cs
- ControlBuilder.cs
- CopyEncoder.cs
- DoubleCollectionValueSerializer.cs
- TransformGroup.cs
- ElementMarkupObject.cs
- WizardStepCollectionEditor.cs
- GenericEnumerator.cs