使用Win95的動畫光標
發表于:2007-07-14來源:作者:點擊數:
標簽:
-在Windows 95系統中具有一個Windows 3.x所不具備的特性――支持動畫的光標文件。你可以在Windows 95目錄中的Cursors子目錄下看到這些動畫的光標文件,它們均具有擴展名*.ANI。在程序中使用相應的動畫光標能夠極大地改善程序的外觀,本文介紹了如何在你的Vis
-在Windows 95系統中具有一個Windows 3.x所不具備的特性――支持動畫的光標文件。你可以在Windows 95目錄中的Cursors子目錄下看到這些動畫的光標文件,它們均具有擴展名*.ANI。在程序中使用相應的動畫光標能夠極大地改善程序的外觀,本文介紹了如何在你的Visual Basic應用程序中使用Windows 95所附帶的動畫光標文件。
使用動畫光標文件
----要在Visual Basic的應用程序中使用Windows 95所附帶的動畫光標,你需要使用下列Windows 應用程序編程接口(API)函數:
LoadCursorFormFile,用于從磁盤上載入光標文件;
ClipeCursor,用于將光標限制在一個固定的矩形區域內;
GetWindowRect,用于獲取該矩形區域,在下面的樣例程序中就是程序主窗體的本身;
SetClassLong,用于設置和提取窗口類的數據,以使光標被顯示在窗體上;
GetClassLong函數,在退出應用程序之前,需要將應用程序的缺省光標設置回程序執行以前的光標,所以需要在程序運行時首先對以前的光標狀態進行備份,這項工作由該函數來完成;
DestroyCursor,在正確顯示了光標之后,需要使用該函數來取消載入的光標。
樣例程序
----下面的樣例程序將在窗體區域內顯示出C:WIN95CURSORS目錄下的APPSTART.ANI動畫光標文件,如果你的Windows 95路徑不同的話,你需要修改樣例程序以正確顯示出動畫光標。
在Visual Basic中開始一個新的工程,采用缺省的方法建立Form1。
在Form1上創建一個命令按鈕控件,采用缺省的方法建立Command1。將它的Caption屬性設置為“顯示動畫光標”。
在Form1上創建第二個命令按鈕控件,采用缺省的方法建立Command2。將它的Caption屬性設置為“恢復缺省光標”。
創建一個新的模塊,采用缺省的方法建立Module1.Bas。將如下的聲明,類型和常量語句添加到Module1.Bas的通用聲明部分中:
Option Explicit
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const GCL_HCURSOR = (-12)
Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA"
(ByVal lpFileName As String) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long,
lpRect As RECT) As Long
Declare Function SetClassLong Lib "user32" Alias "SetClassLongA"
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetClassLong Lib "user32" Alias "GetClassLongA"
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
注意上面的聲明語句需要書寫在一行內。
將如下的語句添加到Form1的通用聲明部分中:
Option Explicit
Dim mhBaseCursor As Long
Dim mhAniCursor As Long
將如下的代碼添加到Form1的Form_Load事件中:
Private Sub Form_Load()
Dim lResult As Long
mhBaseCursor = GetClassLong((Me.hwnd), GCL_HCURSOR)
End Sub
將如下的代碼添加到Command1的單擊事件中:
Private Sub Command1_Click()
Dim lResult As Long
Dim RT_FormArea As RECT
mhAniCursor = LoadCursorFromFile("c:win95cursorsappstart.ani")
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhAniCursor)
lResult = GetWindowRect((Me.hwnd), RT_FormArea)
lResult = ClipCursor(RT_FormArea)
End Sub
將如下的代碼添加到Command2的單擊事件中:
Private Sub Command2_Click()
Dim lResult As Long
Dim RT_ScreenArea As RECT
RT_ScreenArea.Top = 0
RT_ScreenArea.Left = 0
RT_ScreenArea.Bottom = Screen.Height Screen.TwipsPerPixelX
RT_ScreenArea.Right = Screen.Width Screen.TwipsPerPixelY
lResult = ClipCursor(RT_ScreenArea)
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhBaseCursor)
lResult = DestroyCursor(mhAniCursor)
End Sub
----通過按下F5鍵來運行該程序,單擊“顯示動畫光標”命令按鈕,則在窗體的范圍內光標變成為APPSTART.ANI光標,并且光標被限制在窗體的范圍內。單擊“恢復缺省光標”命令按鈕,則窗體中的光標被恢復為缺省的光標。注意,在退出該樣例程序之前,需要單擊“恢復缺省光標”命令按鈕,否則將不能在系統中正確進行其它操作。
原文轉自:http://www.anti-gravitydesign.com