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

2021-04-28 20:00:57 字數 2163 閱讀 8052

專案中需要實現以下功能:

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

該功能本來可以通過拉動水平和垂直滾動條來實現,但實際使用中,使用者更趨向於直接用滑鼠拖動頁面來實現,很多看圖類軟體都有這種類似的功能。而.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 :代表垂直滾動事件

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

先宣告幾個變數:

bool preview_move = false;//是否按下滑鼠,表示處理移動狀態。

point movestart;//移動開始時,滑鼠的座標點

point moveend;//移動過程中滑鼠的座標點

在控制項的mousedown事件中,當滑鼠按下時開始移動頁面,並記下起始座標點:

private void previewer_mousedown(object sender, mouseeventargs e)

在控制項的mouseup事件中,記得當滑鼠放開後要置回非移動狀態:

private void previewer_mouseup(object sender, mouseeventargs e)

以下就是實現移動頁面的關鍵部分了,在控制項的mousemove實現用**間接控制控制項的滾動條位置並實現頁面實時移動:

private void previewer_mousemove(object sender, mouseeventargs e)

int posv1 = posv + movey;

if (posv1 >= minv && posv1 <= maxv) }

ok,乙個能用滑鼠實時移動頁面內容的列印預覽功能作好了。其實,對於.net中很多控制項都可以用相似的方面實現對滾動條的控制。

c 實現Picturebox的滑鼠拖拽功能

要求及背景 工作需要,要在乙個form裡面實現乙個實時預覽的picturebox影象,由於picturebox可能會遮擋到其後面的畫面,所以要求picturebox可以由使用者自行拖拽,類似於懸浮框。原理說明 在網上兜了幾圈之後,決定用三段 實現。首先要註冊滑鼠的三個事件 移動 滑鼠左鍵按下 滑鼠左...

滑鼠移動函式的新增(C )

有很多時候我們需要獲取滑鼠的當前座標,並根據滑鼠位置做一些操作,比如滑鼠靠近某個方向或某個點時顯示部分資訊等等,c 的滑鼠移動事件是非常方便的,你只需要在對話方塊設計的介面中關注屬性那個工具欄,下面將結合進行詳細說明 注意到屬性上有乙個類似閃電的東西,那個是事件按鈕,單擊事件按鈕後,會出現程式操作中...

遊戲人物跟隨滑鼠移動的實現

在遊戲程式設計中,會遇到乙個簡單的問題,那就是滑鼠移動人物也向滑鼠移動的方向移動。其實,它非常簡單。在程式中,我們設定兩個不同的點point1 point2。point1儲存人物貼圖的座標,而point2儲存滑鼠的座標。設定每次貼圖時,貼圖座標point1都會以10個或其它單位緩緩向point2靠攏...