GetScrollInfo仅在激活视觉样式时有效

时间:2010-11-15 11:29:34

标签: c# winforms scrollbar

在我目前的WinForms项目中使用.net3.5我导入了一些User32.dll函数,用于以编程方式滚动。我扩展了TableLayoutPanel - 它应该滚动。

经过一番工作后,一切都运转正常,但现在我发现了这个功能

GetScrollInfo(this.Handle, SB_VERT, ref _si);
当停用Windows XP上的Visual Styles时,

始终返回 false 。如果激活了视觉样式(除了“经典”之外的所有内容都没问题),上面提到的函数将返回 true 和正确的值。

如何避免这种情况,或者如何在不激活视觉样式的情况下获取正确的ScrollValues?

PS:_si是一个名为SCROLLINFO的结构,在MSDN中描述(我不允许链接到多个页面抱歉),并且描述了GetScrollInfo here this.Handle 是基础TableLayoutPanel的句柄。

1 个答案:

答案 0 :(得分:2)

在玩了一下SCROLLINFO结构后,我自己发现了它。

对于遇到同样问题的每个人,我必须将SCROLLINFO结构的 cbSize 设置为sizeOf(SCROLLINFO)。

这样的东西
    public ScrollableExampleConstructor()
    {
        _si = new SCROLLINFO();
        _si.fMask = (uint) ScrollInfoMask.SIF_ALL;
        _si.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(_si);
    }

为我做了这份工作。

感谢大家思考我的问题!