Office中国论坛/Access中国论坛

标题: 用SetSystemCursor制作一个等待事件的窗体 [打印本页]

作者: andymark    时间: 2008-2-18 22:38
标题: 用SetSystemCursor制作一个等待事件的窗体
SetSystemCursor 看名字就知道是设置系统指针的涵数,我们常见的指针型态有手型的、繁忙等待的、水平调整、上下调整等等,根据既定的参数我们很容易把自已喜爱的鼠标指针设置为各种型态,来替代系统的指针。就让我们挖掘其功能,扩展一些新的用法吧。
      这一节讲的是怎样利用SetSystemCursor 制作一个等待事件的窗体。准备之前,先在网上找一款动感的自已喜欢的鼠标指针(后缀名为ani) 。完整代码如下:
  
'读取指针文件或一个动画指针文件(扩展名分别是.cur和.ani)
Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
'改变一个标准系统指针
Private Declare Function SetSystemCursor Lib "user32.dll" (ByVal hcur As Long, ByVal id As Long) As Long
'从指定的模块或应用程序实例中载入一个鼠标指针
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
'复制指定的光标
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon" (ByVal hcur As Long) As Long
'清除指定的鼠标指针,并释放它占用的所有系统资源
Private Declare Function DestroyCursor Lib "user32" (ByVal hCursor As Long) As Long

Private Const OCR_WAIT = 32514    '系统繁忙指针参数

Dim hCursor As Long
Dim OldCurSor As Long

Private Sub Form_Load()
   '取系统繁忙事件的指针
   OldCurSor = LoadCursor(ByVal 0&, OCR_WAIT)
   '复制指针文件,以便能正常恢复初始状态
   OldCurSor = CopyCursor(OldCurSor)
   '新的指针文件
   hCursor = LoadCursorFromFile(CurrentProject.Path & "\aero_working.ani")
End Sub


'在程序需要处理等待的地方加入下面的代码

'设置新的等待指针
   SetSystemCursor hCursor, OCR_WAIT

'   ..............................   需要处理事件的代码自已加吧

'恢复初始指针
  SetSystemCursor OldCurSor, OCR_WAIT



Private Sub Form_Unload(Cancel As Integer)
'释放指针资源
   If OldCurSor <> 0 Then
        SetSystemCursor OldCurSor, OCR_WAIT
    End If
   DestroyCursor OldCurSor
   DestroyCursor hCursor
End Sub
作者: tmtony    时间: 2008-2-18 23:37
老兄最近 API 佳作不断啊, 看来要弄个专栏了
作者: andymark    时间: 2008-2-18 23:47
佳作谈不上,我是现学现卖,跟老大你相比还差很大的距离
作者: tmtony    时间: 2008-2-19 00:26
我是越走越远了, 技术跟不上你们了.
不知有没有API 获取到 弹出窗体的Activate事件 或者 取得窗体获得焦点的消息 (Access此事件无反应) 最近为这个问题伤了脑筋
作者: andymark    时间: 2008-2-19 11:08
用来处理什么事情的?
如果是传递数值,并执行相关的命令,我一般是通过公共变量和TIMER事件来解决
作者: t小宝    时间: 2008-2-19 15:54
是不是这个函数用来自定义ACCESS运行繁忙时显示的指针形状?
作者: t小宝    时间: 2008-2-19 16:00
是不是可以视为 Screen.MousePointer  的扩充
作者: andymark    时间: 2008-2-19 16:09
原帖由 t小宝 于 2008-2-19 15:54 发表
是不是这个函数用来自定义ACCESS运行繁忙时显示的指针形状?


  是的,根据相关的参数,完全可以自定义程序运行的指针型态
作者: tmtony    时间: 2008-2-19 17:12
主要是想知道 用户 现在打开的是哪个窗体, 如果切换到另一个窗体, 我可知道他的当前位置
作者: andymark    时间: 2008-2-19 17:36
GetLastActivePopup代表最近激活过的弹出式窗口的句柄,具体没测试过
作者: hgxxx    时间: 2008-2-20 10:45
来学习学习
作者: fan0217    时间: 2008-2-20 10:54
andymark的API功底颇深,开个专栏吧!
作者: fan0217    时间: 2008-2-20 11:08
我这里也有个关于鼠标的东东。鼠标查看器,以前的作品了,后来做了些修改。
作者: andymark    时间: 2008-2-20 11:32
谢谢分享!! 学习学习

要想精通API没有一年半载谈何容易,我是现学现卖,不过我倒赞成开设API栏目
作者: chinj    时间: 2008-5-11 10:02
越来越喜欢你了。
作者: chinj    时间: 2008-5-11 12:31
收藏,备用。
作者: lkkl66    时间: 2008-8-2 23:40
[:24] [:22]
作者: chaojianan    时间: 2009-9-27 10:19
谢谢分享。
作者: sagemeyou    时间: 2009-11-6 16:21
好东西
作者: xlb004    时间: 2014-11-9 12:57
2222222
作者: 李力军2    时间: 2017-3-3 08:53
可以试一下




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3