技术开发 频道

C#中用鼠标移动页面功能的实现

 并记下起始坐标点:

 private void previewer_MouseDown(object sender, MouseEventArgs e)

 {

 Preview_move = true;

 MoveStart = e.Location;

 }

 在控件的MouseUp事件中,记得当鼠标放开后要置回非移动状态:

 private void previewer_MouseUp(object sender, MouseEventArgs e)

 {

 Preview_move = false;

 }

 以下就是实现移动页面的关键部分了,在控件的MouseMove实现用代码间接控制控件的滚动条位置并实现页面实时移动:

 private void previewer_MouseMove(object sender, MouseEventArgs e)

 {

 if (!Preview_move) return;

 MoveEnd = e.Location;

 int MinH,MaxH,MinV,MaxV;

 //获得鼠标在X和Y两个方向上的移动量。除以10是为是让移动页面的速度变慢一点。而前面的负号则是用来调节页面移动方向的。

 int MoveX = -(MoveEnd.X - MoveStart.X)/10;

 int MoveY = -(MoveEnd.Y - MoveStart.Y)/10;

 //获取滚动条的最大最小位置和当前位置

 GetScrollRange(previewer.Handle, 0, out MinH, out MaxH);

 GetScrollRange(previewer.Handle, 1, out MinV, out MaxV);

 int PosH = GetScrollPos(previewer.Handle, 0);

 int PosV = GetScrollPos(previewer.Handle, 1);

 //计算最终滚动条的位置(注意最终位置不要超出最大最小值的范围)

 int PosH1 = PosH + MoveX;

 if (PosH1 >= MinH && PosH1 <= MaxH)

 {

 SetScrollPos(previewer.Handle, SB_HORZ, PosH1, true);//设置滚动条的位置

 PostMessage(previewer.Handle, WM_HSCROLL, SB_THUMBPOSITION + 0x10000 * PosH1, 0);//告诉控件移动页面内容到相应的位置上

 }

 int PosV1 = PosV + MoveY;

 if (PosV1 >= MinV && PosV1 <= MaxV)

 {

 SetScrollPos(previewer.Handle, SB_VERT, PosV1, true);

 PostMessage(previewer.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * PosV1, 0);

 }

 }

 OK,一个能用鼠标实时移动页面内容的打印预览功能作好了。其实,对于.net中很多控件都可以用相似的方面实现对滚动条的控制。

查看原文地址

0
相关文章