我正在为 WinForms 创建一个用户控件,并且需要滚动控件窗口的一部分。
莫名其妙地,WinForms 中似乎没有可用的 ScrollWindow() 方法。因此,我尝试使用 InteropServices 来使用 Win32 API ScrollWindow() 函数,并使用以下变体:
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
public RECT(Rectangle rect)
{
this.bottom = rect.Bottom;
this.left = rect.Left;
this.right = rect.Right;
this.top = rect.Top;
}
}
[DllImport("user32")]
public static extern int ScrollWindow(IntPtr hWnd, int nXAmount, int nYAmount,
ref RECT rectScrollRegion, ref RECT rectClip);
void MyScrollFunc(int yAmount)
{
RECT r = new RECT(ClientRectangle);
ScrollWindow(Handle, 0, yAmount, ref r, ref r);
}
结果是这段代码什么都不做。我已经尝试了此代码的各种变体,包括在滚动后调用 Update() (这应该不是必需的)。
ScrollWindow() 返回 1,这表示成功,但无论我尝试什么,它对控制窗口的内容都没有影响。
有谁知道用户控件是否存在阻止以这种方式修改显示的内容?我正在 Windows XP 上的 C# Express Edition 2008 上对此进行测试。