日期:2014-05-18  浏览次数:21066 次

GetScrollInfo获取父控件滚动条信息,但返回值全是0。求指点。
我使用GetScrollInfo获取treeview滚动条信息的时候,返回值全是0。为什么?

下面是我的代码:
C# code

SCROLLINFO si = new SCROLLINFO();
si.cbSize = (uint)Marshal.SizeOf(si);
si.fMask = (uint)ScrollInfoMask.SIF_ALL;
WIN32.GetScrollInfo(this.Handle, (int)SBOrientation.SB_VERT, ref si)

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);

[Serializable, StructLayout(LayoutKind.Sequential)]
public class SCROLLINFO
{
    public uint cbSize;
    public uint fMask;
    public int nMin;
    public int nMax;
    public uint nPage;
    public int nPos;
    public int nTrackPos;
}

public enum ScrollInfoMask : uint
{
    SIF_RANGE = 0x1,
    SIF_PAGE = 0x2,
    SIF_POS = 0x4,
    SIF_DISABLENOSCROLL = 0x8,
    SIF_TRACKPOS = 0x10,
    SIF_ALL = (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS),
}   




其实我在另外一个项目里面也用过这个API,获取能成功,但是在我新建的工程里面使用这个API,返回值除了csize和fmask,其他全是0。为什么? 请大神指点指点啊!!!!!

------解决方案--------------------
this.Handle 是TreeView的还是Form的?

那个Window Handle一定要用对,否则就不是你想要的东西了。

------解决方案--------------------
你用spy++看看那个TreeView中的ScrollBar是不是有自己的Window Handle,如果是的话,要用那个而不是TreeView的Handle。
------解决方案--------------------
this.Handle?,你要获取的是TreeView,应该用TreeView的handle