C#中實現用滑鼠移動頁面的功能

來源:互聯網
上載者:User

項目中需要實現以下功能:

預覽列印控制項中,可以用滑鼠拖動頁面,以查看超出顯示範圍之外的部分內容。

該功能本來可以通過拉動水平和垂直捲軸來實現,但實際使用中,使用者更趨向於直接用滑鼠拖動頁面來實現,很多看圖類軟體都有這種類似的功能。而.net的預覽列印控制項卻很遺憾的沒有提供這一功能,只來自己想辦法來實現啦。

呵呵,不過辦法總是有的。

我的辦法就是用代碼來控制預覽列印控制項中的水平來垂直捲軸的位置,間接實現和用滑鼠直接拖動捲軸一樣的效果。

在實現這一功能的過程中,最大的困難是預覽列印控制項並沒有讓程式員直接調用的關於捲軸的方法或屬性。所以只好向WinAPI求助了。

以下API函數和常量就是實現上述功能的關鍵了:

[DllImport("user32.dll")]
private static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);
[DllImport("user32.dll")]
private static extern int GetScrollPos(IntPtr hwnd, int nBar);
[DllImport("user32.dll")]
private static extern bool PostMessage(IntPtr hWnd, int nBar, int wParam, int lParam);
[DllImport("user32", CharSet = CharSet.Auto)]
private static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);

private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
private const int SB_THUMBPOSITION = 4;

簡單說明一下吧:

SetScrollPos:設定所指定捲軸中的滾動按鈕的位置

GetScrollPos:擷取指定捲軸的滾動按鈕的位置

GetScrollRange:擷取指定捲軸的滾動按鈕的位置最大最小值

PostMessage:這個函數是關鍵中的關鍵,它負責向Windows控制項發送相應的訊息,以真正執行相應的操作。一些網友實現了捲軸中滑塊位置的移動,但卻沒有引起控制項中內容的移動,其原因就是因為沒有調用這個函數,沒有把移動內容的訊息發送給控制項。

SB_HORZ :代表水平捲軸

SB_VERT :代表垂直捲軸

WM_HSCROLL :代表水平滾動事件

WM_VSCROLL :代表垂直滾動事件

SB_THUMBPOSITION :至於這個常量,其含義我也不是很清楚,有知道的朋友歡迎回複給我。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.