程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中實現用鼠標移動頁面的功能(2)

C#中實現用鼠標移動頁面的功能(2)

編輯:關於C語言

好了,准備工作做好了,就可以開工了。

先聲明幾個變量:

bool PrevIEw_move = false;//是否按下鼠標,表示處理移動狀態。
Point MoveStart;//移動開始時,鼠標的坐標點
Point MoveEnd;//移動過程中鼠標的坐標點

在控件的MouseDown事件中,當鼠標按下時開始移動頁面,並記下起始坐標點:

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中很多控件都可以用相似的方面實現對滾動條的控制。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved