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