在我目前的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的句柄。
答案 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);
}
为我做了这份工作。
感谢大家思考我的问题!