winfrom api发送消息,实现滚动效果(重绘滚动条用)
#region 调用系统方法,是容器内的所有控件随滚动条移动 private void SetControlsScroll(int horizontalvalue,int verticalvalue) { var flags = BindingFlags.NonPublic | BindingFlags.Instance; var field = typeof(ScrollableControl).GetField("displayRect", flags); var rect = (Rectangle)field.GetValue(this); Rectangle cr = this.ClientRectangle; RECT rcClip = RECT.FromXYWH(cr.X, cr.Y, cr.Width, cr.Height); RECT rcUpdate = RECT.FromXYWH(cr.X, cr.Y, cr.Width, cr.Height); var xDelta = -horizontalValue - rect.X; var yDelta = -verticalvalue - rect.Y; //var yDelta = -rect.Y; rect.X = -horizontalValue; rect.Y = -verticalvalue; //rect.Y = 0; field.SetValue(this, rect); int SW_SCROLLCHILDREN = 0x0001; int SW_INVALIDATE = 0x0002; int SW_ERASE = 0x0004; ScrollWindowEx(new HandleRef(this, Handle), xDelta, yDelta, null, ref rcClip, new HandleRef(), ref rcUpdate, SW_INVALIDATE | SW_ERASE | SW_SCROLLCHILDREN); } #endregion
相关资料:
http://msdn.microsoft.com/zh-cn/library/dwbfte93.aspx