Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsListViewScroll.cs / 1305600 / WindowsListViewScroll.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Class to provide scroll bars for listview // // History: // Jean-Francois Peyroux (in DotNet) // 2003/08/08 - alexsn Updated for WCP // 2004/08/19 - preid Took this out of the class hierarchy for listview and made the // non-client area use to create the scroll bar children // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.ComponentModel; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using MS.Win32; namespace MS.Internal.AutomationProxies { // The default implementation for scroll bars uses SB_THUMBTRACK and SB_THUMBPOSITION for SetValue // This does not work with listview so the Scrollbar is overloaded with a derived version that // uses LVM_SCROLL messages instead class WindowsListViewScrollBar: WindowsScrollBar, IRangeValueProvider { // ----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowsListViewScrollBar(IntPtr hwnd, ProxyFragment parent, int item, int sbFlag) : base( hwnd, parent, item, sbFlag){} #endregion Constructors //------------------------------------------------------ // // Patterns Implementation // //----------------------------------------------------- #region RangeValue Pattern void IRangeValueProvider.SetValue(double val) { // Check if the window is disabled if (!SafeNativeMethods.IsWindowEnabled (_hwnd)) { throw new ElementNotEnabledException(); } NativeMethods.ScrollInfo si = new NativeMethods.ScrollInfo (); si.fMask = NativeMethods.SIF_ALL; si.cbSize = Marshal.SizeOf (si.GetType ()); if (!Misc.GetScrollInfo(_hwnd, _sbFlag, ref si)) { return; } int pos = (int)val; // Throw if val is greater than the maximum or less than the minimum. // See remarks for WindowsScrollBar.GetScrollValue(ScrollBarInfo.MaximumPosition) // regarding this calculation of the allowed maximum. if (pos > si.nMax - si.nPage + (si.nPage > 0 ? 1 : 0)) { throw new ArgumentOutOfRangeException("value", val, SR.Get(SRID.RangeValueMax)); } else if (pos < si.nMin) { throw new ArgumentOutOfRangeException("value", val, SR.Get(SRID.RangeValueMin)); } // LVM_SCROLL does not work in mode Report, use SetScrollPos instead bool isVerticalScroll = IsScrollBarVertical(_hwnd, _sbFlag); if (isVerticalScroll && WindowsListView.InReportView (_hwnd)) { Misc.SetScrollPos(_hwnd, _sbFlag, pos, true); return; } // get the "full size" of the list-view int size = WindowsListView.ApproximateViewRect (_hwnd); // delta between current and user-requested position in pixels // since the cPelsAll contains the dimension in pels for all items + the 2 pels of the border // the operation below does a trunc on purpose int dx = 0, dy = 0; if (!isVerticalScroll) { int cPelsAll = NativeMethods.Util.LOWORD (size); dx = (int)((pos - si.nPos) * ((double)cPelsAll / (si.nMax + 1 - si.nMin))); } else { int cPelsAll = NativeMethods.Util.HIWORD (size); dy = (int)((pos - si.nPos) * ((double)cPelsAll / (si.nMax + 1 - si.nMin))); } if (WindowsListView.Scroll (_hwnd, (IntPtr) dx, (IntPtr) dy)) { // Check the result, on occasion the result will be different to given value // a-jeanp: I played a lot to figure out what it is not the case. // I am giving up and issuing instead a second call with a new delta. if (!Misc.GetScrollInfo(_hwnd, _sbFlag, ref si)) { return; } if (si.nPos != pos) { if (!isVerticalScroll) { int cPelsAll = NativeMethods.Util.LOWORD (size); dx = (pos - si.nPos) * (cPelsAll / (si.nMax + 1 - si.nMin)); } else { int cPelsAll = NativeMethods.Util.HIWORD (size); dy = (pos - si.nPos) * (cPelsAll / (si.nMax + 1 - si.nMin)); } WindowsListView.Scroll (_hwnd, (IntPtr) dx, (IntPtr) dy); } } } #endregion Value Pattern } } // 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 to provide scroll bars for listview // // History: // Jean-Francois Peyroux (in DotNet) // 2003/08/08 - alexsn Updated for WCP // 2004/08/19 - preid Took this out of the class hierarchy for listview and made the // non-client area use to create the scroll bar children // //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.ComponentModel; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using MS.Win32; namespace MS.Internal.AutomationProxies { // The default implementation for scroll bars uses SB_THUMBTRACK and SB_THUMBPOSITION for SetValue // This does not work with listview so the Scrollbar is overloaded with a derived version that // uses LVM_SCROLL messages instead class WindowsListViewScrollBar: WindowsScrollBar, IRangeValueProvider { // ----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors internal WindowsListViewScrollBar(IntPtr hwnd, ProxyFragment parent, int item, int sbFlag) : base( hwnd, parent, item, sbFlag){} #endregion Constructors //------------------------------------------------------ // // Patterns Implementation // //----------------------------------------------------- #region RangeValue Pattern void IRangeValueProvider.SetValue(double val) { // Check if the window is disabled if (!SafeNativeMethods.IsWindowEnabled (_hwnd)) { throw new ElementNotEnabledException(); } NativeMethods.ScrollInfo si = new NativeMethods.ScrollInfo (); si.fMask = NativeMethods.SIF_ALL; si.cbSize = Marshal.SizeOf (si.GetType ()); if (!Misc.GetScrollInfo(_hwnd, _sbFlag, ref si)) { return; } int pos = (int)val; // Throw if val is greater than the maximum or less than the minimum. // See remarks for WindowsScrollBar.GetScrollValue(ScrollBarInfo.MaximumPosition) // regarding this calculation of the allowed maximum. if (pos > si.nMax - si.nPage + (si.nPage > 0 ? 1 : 0)) { throw new ArgumentOutOfRangeException("value", val, SR.Get(SRID.RangeValueMax)); } else if (pos < si.nMin) { throw new ArgumentOutOfRangeException("value", val, SR.Get(SRID.RangeValueMin)); } // LVM_SCROLL does not work in mode Report, use SetScrollPos instead bool isVerticalScroll = IsScrollBarVertical(_hwnd, _sbFlag); if (isVerticalScroll && WindowsListView.InReportView (_hwnd)) { Misc.SetScrollPos(_hwnd, _sbFlag, pos, true); return; } // get the "full size" of the list-view int size = WindowsListView.ApproximateViewRect (_hwnd); // delta between current and user-requested position in pixels // since the cPelsAll contains the dimension in pels for all items + the 2 pels of the border // the operation below does a trunc on purpose int dx = 0, dy = 0; if (!isVerticalScroll) { int cPelsAll = NativeMethods.Util.LOWORD (size); dx = (int)((pos - si.nPos) * ((double)cPelsAll / (si.nMax + 1 - si.nMin))); } else { int cPelsAll = NativeMethods.Util.HIWORD (size); dy = (int)((pos - si.nPos) * ((double)cPelsAll / (si.nMax + 1 - si.nMin))); } if (WindowsListView.Scroll (_hwnd, (IntPtr) dx, (IntPtr) dy)) { // Check the result, on occasion the result will be different to given value // a-jeanp: I played a lot to figure out what it is not the case. // I am giving up and issuing instead a second call with a new delta. if (!Misc.GetScrollInfo(_hwnd, _sbFlag, ref si)) { return; } if (si.nPos != pos) { if (!isVerticalScroll) { int cPelsAll = NativeMethods.Util.LOWORD (size); dx = (pos - si.nPos) * (cPelsAll / (si.nMax + 1 - si.nMin)); } else { int cPelsAll = NativeMethods.Util.HIWORD (size); dy = (pos - si.nPos) * (cPelsAll / (si.nMax + 1 - si.nMin)); } WindowsListView.Scroll (_hwnd, (IntPtr) dx, (IntPtr) dy); } } } #endregion Value Pattern } } // 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
- FormClosingEvent.cs
- FtpRequestCacheValidator.cs
- ScrollItemPattern.cs
- CssTextWriter.cs
- RoleGroup.cs
- PenContexts.cs
- DispatcherHooks.cs
- SQLGuidStorage.cs
- GridLengthConverter.cs
- HostedHttpContext.cs
- QueryAccessibilityHelpEvent.cs
- XmlIgnoreAttribute.cs
- DataIdProcessor.cs
- Misc.cs
- updateconfighost.cs
- Convert.cs
- InkCanvasSelection.cs
- NoResizeSelectionBorderGlyph.cs
- MergePropertyDescriptor.cs
- ToolStripDropDownButton.cs
- X509RecipientCertificateClientElement.cs
- Label.cs
- ClientUtils.cs
- ChooseAction.cs
- MailSettingsSection.cs
- BufferCache.cs
- ObservableCollectionDefaultValueFactory.cs
- XmlQuerySequence.cs
- UIElement3DAutomationPeer.cs
- SystemUdpStatistics.cs
- Encoding.cs
- RealProxy.cs
- ScriptResourceHandler.cs
- VersionPair.cs
- SiteMapHierarchicalDataSourceView.cs
- Internal.cs
- DateTimeParse.cs
- QilTypeChecker.cs
- DataBindingHandlerAttribute.cs
- ImageField.cs
- WebDescriptionAttribute.cs
- EnumerableRowCollection.cs
- TextTreeDeleteContentUndoUnit.cs
- RtfControlWordInfo.cs
- PaperSource.cs
- ControlParameter.cs
- DbProviderFactoriesConfigurationHandler.cs
- UriTemplateMatchException.cs
- InfoCardKeyedHashAlgorithm.cs
- XmlAutoDetectWriter.cs
- BitmapEffectInputData.cs
- Binding.cs
- ScrollChrome.cs
- PtsContext.cs
- XmlValidatingReaderImpl.cs
- BuildProviderAppliesToAttribute.cs
- Viewport3DVisual.cs
- AssemblyEvidenceFactory.cs
- ColorTransformHelper.cs
- PasswordTextContainer.cs
- X509ImageLogo.cs
- ResourceSetExpression.cs
- ObjectTypeMapping.cs
- ImageBrush.cs
- GetPageCompletedEventArgs.cs
- DataKey.cs
- ServiceDiscoveryBehavior.cs
- MsmqIntegrationBindingElement.cs
- EdmEntityTypeAttribute.cs
- CustomValidator.cs
- AppliedDeviceFiltersEditor.cs
- NumberFormatInfo.cs
- ServerValidateEventArgs.cs
- CompilerGlobalScopeAttribute.cs
- SplineKeyFrames.cs
- BindingExpressionBase.cs
- ToolStripSeparatorRenderEventArgs.cs
- TargetConverter.cs
- ItemsChangedEventArgs.cs
- DrawListViewSubItemEventArgs.cs
- NeutralResourcesLanguageAttribute.cs
- hresults.cs
- DocumentViewerConstants.cs
- TokenBasedSetEnumerator.cs
- CacheEntry.cs
- SystemWebCachingSectionGroup.cs
- TableDetailsCollection.cs
- WebPartCatalogCloseVerb.cs
- HttpWriter.cs
- Header.cs
- EdmToObjectNamespaceMap.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- EditorAttribute.cs
- odbcmetadatafactory.cs
- RemoteWebConfigurationHostServer.cs
- MissingMemberException.cs
- SignalGate.cs
- StateWorkerRequest.cs
- ProxySimple.cs
- DoubleAnimationBase.cs