新聞| | PChome| 登入
2007-07-07 12:20:39 | 人氣1,145| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

讓Visual Basic應用程式支援滑鼠滾輪

一、提出問題

  自從1996年微軟推出Intellimouse滑鼠後,帶滾輪的滑鼠開始大行其道,支援滑鼠滾輪的應用軟體也越來越多。但我感到奇怪,為什麼VB到6.0本身仍然不支援滑鼠滾輪,VF可是從5.0就提供MouseWheel事件了。

  如何讓VB應用程式支援滑鼠滾輪?MSDN上有一篇解決VB下應用Intellimouse滑鼠的文章,它解決這一問題的方法是透過一個幾十K的第三方控件實現的,可惜該控件沒有源代碼。況且為了支援滑鼠滾輪使用一個第三方控件,好像有點得不償失。本文給出用純VB實現這一功能的方法。

  二、解決問題

  我們知道VB應用程式響應的Windows傳來的消息,需要透過VB解釋。可是很不幸,雖然VB解釋所有得消息,卻隻讓用戶程式在事件中處理部分消息,VB自己處理其他的消息,或者忽略這些消息。

  在VB5.0以前應用程式無法越過VB直接處理消息,微軟從VB5.0開始提供AddressOf 運算符,該運算符可以讓用戶程式將函數或者過程的地址傳遞給一個API函數。這樣我們就可以在VB應用程式中編寫自己的窗口處理函數,透過AddressOf 運算符將在VB中定義的窗口地址傳遞給窗口處理函數,從而繞過VB的解釋器,自己處理消息。事實上,該方法可用於在VB中處理任何消息。

  實現應用程式支援滑鼠滾輪的關鍵是,捕穫滑鼠滾輪的消息 MSH_MOUSEWHEEL、WM_MOUSEWHEEL。其中MSH_MOUSEWHEEL是為95準備的,需要Intellimouse驅動程式,而WM_MOUSEWHEEL是目前各版本Windows(98/NT40/2000)內置的消息。本文主要處理WM_MOUSEWHEEL消息。下面是WM_MOUSEWHEEL的語法。

  WM_MOUSEWHEEL
  fwKeys = LOWORD(wParam); /* key flags */
  zDelta = (short) HIWORD(wParam);
  /* wheel rotation */
  xPos = (short) LOWORD(lParam);
  /* horizontal position of pointer */
  yPos = (short) HIWORD(lParam);
  /* vertical position of pointer */

  其中:fwKeys指出是否有CTRL、SHIFT、滑鼠鍵(左、中、右、附加)按下,允許複合。zDelta傳遞滾輪卷動的快慢,該值小於零表示滾輪向後卷動(朝用戶方向),大於零表示滾輪向前卷動(朝顯示器方向)。lParam指出滑鼠指針相對螢幕左上的x、y軸坐標。

  滾輪按鈕相當於普通的三鍵滑鼠的中鍵,根據滾輪按鈕的動作,Windows分別發出WM_MBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONDBLCLK消息,這些消息VB已經在滑鼠事件中支援。

  三、實際應用

  根據上述原理,給出一個資料庫應用的典型例子。

  1.戶介面如圖1所示。該例是班級和學生一對多的查詢,當用戶在學生網格以外卷動滑鼠滾輪,班級主表前後移動;用戶在網格以內卷動滑鼠學生明細表垂直移動;如果在網格以內按住滑鼠滾輪鍵並且卷動滑鼠,學生明細表水平移動。

  2.Form1上ADO Data 控件對象datPrimaryRS的 ConnectionString為"PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;dsn=SCHOOL;uid=;pwd=;", RecordSelectors 屬性的SQL命令文本為"SHAPE {select * from 班級} AS ParentCMD APPEND ({select * from 學生 } AS ChildCMD RELATE 班級名稱 TO 班級名稱) AS ChildCMD"。

  3.TextBox的DataSource均為datPrimaryRS,DataFiled如圖所示。

  4.窗口下部的網格是DataGrid控件,名稱為grdDataGrid。

  5.表單From1.frm的清單如下:

Private Sub Form_Load()

 Set grdDataGrid.DataSource = datPrimaryRS.Recordset("ChildCMD").UnderlyingValue
 Hook Me.hWnd

End Sub

Private Sub Form_Unload(Cancel As Integer)
 UnHook Me.hWnd
End Sub

台長: Kenny
人氣(1,145) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:設計模式
此分類上一篇:利用Visual Basic實現木馬攻擊

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文