在VB5.0下有效果控制鼠標的輸入焦點
發表時間:2023-08-13 來源:明輝站整理相關軟件相關文章人氣:
[摘要]目前新推出的各種軟件中都存在一種共同的特征,將用戶界面中的圖形、命令、說明文字融為一體,將鼠標的移動和操作融為一體。如INTERNET網中的瀏覽器、可視編程軟件中的操作菜單和工具按鈕以及這些系統中的...
目前新推出的各種軟件中都存在一種共同的特征,將用戶界面中的圖形、命令、說明文字融為一體,將鼠標的移動和操作融為一體。如INTERNET網中的瀏覽器、可視編程軟件中的操作菜單和工具按鈕以及這些系統中的幫助功能等,都使各種命令區域融合到圖形界面中去,當將鼠標指針移動到該區域上時,相應的命令按鈕會凸起(也可能出現動態提示或按鈕顏色變化,以提示操作者,從而實現程序界面中的各種功能。用戶界面中的這種超文本技術、動態技術和鼠標指示功能,給用戶操作帶來極大方便。
應用程序中的這種自動感應命令區域功能,就是鼠標輸入焦點的控制功能。雖然上述控制技術在高級應用程序中才能見到,但在目前的可視化編程工具中實現起來并非特別困難。下面就以VB5. 0為例,介紹筆者在自己的應用程序中實現鼠標輸入焦點控制相關技術的詳細實現方法和具體步驟。
定義鼠標輸入焦點的命令區域
鼠標輸入焦點(或稱鼠標熱點)是應用程序界面中響應鼠標(或鍵盤)輸入命令的客戶區域,這個區域通常是規則的矩形(也可以是不規則的)。要控制鼠標的輸入焦點,就必須判斷鼠標發生動作的屏幕位置是否位于命令的客戶區域內。所以,只要將命令的客戶區域坐標數據保存到數組中,然后將鼠標發生動作的位置與數組中數據比較,就不難獲取當前鼠標的輸入焦點。如果需要在位圖文件.BMP和.DBI等中設置焦點,可以利用Windows下的可視開發工具Visual C++和Visual Basic 等提供的熱點編輯器。輸入焦點的命令區域一般包括左上和右下兩個坐標數值,除此之外還可以包含一些與相關提示和執行動作有關的其他信息。
在VB5.0的窗體聲明部分,可以利用自定義數據類型的方法來確定鼠標輸入焦點的數據結構。如筆者定義的數據結構中包括提示信息、執行信息和矩形客戶區域的坐標值等。
Private Type RectHot
DoMess As String ;執行信息
Butt As String ;按鈕顯示
Mess As String ;提示信息
LeftX As Integer ;客戶區域坐標
TopY As Integer
RightX As Integer
BottomY As Integer
...... ;其他數據定義
End Type
Dim RectHots(8) As RectHot ;根據命令區域個數定義數組
鼠標輸入焦點數據的初始化問題
確定了鼠標輸入焦點的數據結構之后,首先要根據界面中的按鈕、標簽和圖形命令等確定數據與命令區域之間的對應關系,然后在Form-Load( )函數載入窗體時對數組中的成員進行初始化,以正確獲取鼠標輸入焦點。對于一般控件可直接在屬性窗口中獲得其準確坐標值,而對于圖片等圖形控件,可利用鼠標取得其命令區域的坐標值。初始化方法如下:
Form-Load()
RectHots(1).DoMess = ″Do RECT 1″
RectHots(1).Mess = ″Mouse RECT 1″
RectHots(1).LeftX = 1080
RectHots(1).TopY = 240
RectHots(1).RightX = 3120
RectHots(1).BottomY = 1040
RectHots(2).DoMess = ″Do RECT 2″
RectHots(2).Mess = ″Mouse RECT 2″
RectHots(2).LeftX = 1080
RectHots(2).TopY = 840
RectHots(2).RightX = 3120
RectHots(2).BottomY = 1840
......
End Sub
鼠標輸入焦點的控制方法
在鼠標輸入焦點捕捉客戶區域設置完成后,接著就必須在MouseMove( )函數中判斷當前的鼠標光標位置是否落入某個特定客戶區域內,如果位于特定客戶區域內,則通過變量設置可將當前客戶區域設置為具有鼠標輸入焦點的有效區域,并進行客戶區域顏色或凸凹狀態的改變或者利用鼠標光標形狀的改變以及動態提示等,來提示當前鼠標輸入焦點的有效捕捉客戶區域。當鼠標指針移出當前客戶區域,應恢復原來的客戶區域狀態和原來的鼠標光標指針,并清除動態提示窗口。當點擊鼠標某個按鍵后,可通過MouseDown( )函數和設置的當前有效命令區域變量執行相應的功能。
在鼠標移動函數中判斷光標指針落入客戶區域方法: Private Sub Frame1-MouseMove(Button As Integer,
Shift As Integer, X As Single, Y As Single)
Dim CurHot As Integer
Dim i As Integer
For i = 1 To n ;依次判斷n個命令區
If X>RectHots(i).LeftX And X<RectHots(i).RightX
And Y>RectHots(i).TopY And Y<RectHots(i).BottomY Then
CurHot = True ;鼠標指針落入命令區域
Exit For
End If
Next i
鼠標輸入焦點的相關提示功能
當前有效的鼠標輸入焦點相關提示功能,可根據應用程序的實際需要,選擇其中的一種或幾種。各種相關提示功能的實現方法如下:
1. 鼠標光標形狀變化 可通過設置用戶自定義鼠標光標形狀的方法來實現,恢復時只需將其類型設置為默認值。
控件名.MousePointer = 99 ;99為自定義型光標形狀
控件名.MouseIcon = LoadPicture(″C:\WINDOWS\CURSORS\HAND-RL.CUR″);光標資源文件
恢復時只需將MousePointer設置為0即可恢復默認值。
2. 動態提示功能 通過設置標簽控件及窗口背景色來實現,默認狀態為不顯示,在需要動態提示窗口時,重新設置其LEFT和TOP位置參數及其Caption屬性的內容并置Visible屬性為True(可見),取消時只需將標簽的屬性Visible設置為False即可。
動態提示窗口設置:
Label1.Left = RectHots(i).LeftX
Label1.Top = RectHots(i).TopY
Label1.Caption = RectHots(i).Mess
Label1.Visible = True
動態提示窗口取消:
Label1.Caption = ″″
Label1.Visible = False
3. 改變顏色 只需變換當前客戶區域控件的背景顏色值,恢復時只需將其設置成默認值即可。
顏色狀態設置:控件.BackColor=&H00000018&
顏色狀態恢復:控件.BackColor=&H00000001&
4. 改變命令區凸凹狀態 如果命令區域為按鈕格式,可通過繪圖函數的異或(XOR)屬性改變按鈕的狀態來實現相應的提示功能,鼠標移動出客戶區域后再恢復其原來狀態。
5. 通過使能屬性進行提示 可通過某些控件的Enable屬性來控制客戶區域的有效狀態。
設置方法:控件.Enable=True
取消恢復:控件.Enable=False
6. 其他提示方法 此外還可以通過設置某些控件的其他屬性如控件邊框的粗細等方法來實現有效區域的提示。
鼠標輸入焦點的相關執行功能
當點擊鼠標某個按鍵(左鍵或右鍵或雙擊操作)后,通過MouseDown( )函數和設置的當前有效命令區域變量的內容,來確定命令區域應該執行什么樣的相應功能。如顯示對話框窗口信息的簡單方法如下:
Private Sub Framel_MouseDown(Button As Integer,
Shift As Integer, X As Single, Y As Single)
If CurRect < > 0 Then
MsgBox RectHots(i).DoMess, 0, ″″
End If
End Sub
控制鼠標輸入焦點的應用程序實例
本文提供了一個簡單的鼠標輸入焦點控制的應用程序實例。程序中設置了如下控件:
控件 名稱 屬性 功能
Lable Lable1 顯示"輸入焦點演示"
Frame Frame1 Picture="C:\WINDOWS\安裝程序.BMP" 放置其他控件并顯示圖象等的容器
Lable Lable2 AutoSize=True 自動調整窗口大小
Visiable=False 起始狀態為不顯示
Time Time1 Interval=500 動態提示延時功能,設置延遲值
該程序中將Picture1的客戶區域劃分為3個部分(見文后程序中的Form-Load( )函數中的初始化數據),用來演示鼠標移動過程中光標形狀的變化和輸入焦點控制功能以及相關的命令按鈕提示、凸凹狀態和執行操作等。程序中通過變量控制當前有效的客戶命令區域,當然讀者可根據實際需要將其修改為各種命令按鈕或圖片等。程序中的相關提示功能采用了最為常用的鼠標光標形狀變化、動態提示窗口和按鈕狀態變化的提示方法,其中動態提示功能還在提示窗口首次顯示前進行了一定延時處理,使其和當前的可視編程工具中的提示功能完全相同。程序中圖版框中設置的命令按鈕是在Picture1-Paint()函數中設置的,命令按鈕的狀態變化是通過UpLine()和DownLine()兩個函數來實現的。當命令區域取得輸入焦點后,為簡化程序其執行功能只顯示一個用戶模態對話框。
本文程序在P200計算機、VB5.0和Windows 98測試版下調試通過,程序的運行結果見圖1和圖2,其中圖1為程序運行時的界面,圖2為當鼠標指針移動到命令按鈕二上時鼠標光標、命令按鈕的狀態變化以及按鈕的動態提示情況,當鼠標指針移開后,程序界面又恢復圖1的狀態。實際程序設計時可根據具體情況進行相應的功能取舍或補充。總之,在應用程序中靈活地控制鼠標輸入焦點,可使開發的應用程序具有很高的專業水準和簡單靈活的操作方法。