设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

123下一页
返回列表 发新帖
查看: 9040|回复: 21
打印 上一主题 下一主题

用SetSystemCursor制作一个等待事件的窗体

[复制链接]
跳转到指定楼层
1#
发表于 2008-2-18 22:38:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2008-2-18 23:37:27 | 只看该作者
老兄最近 API 佳作不断啊, 看来要弄个专栏了
3#
 楼主| 发表于 2008-2-18 23:47:10 | 只看该作者
佳作谈不上,我是现学现卖,跟老大你相比还差很大的距离

点击这里给我发消息

4#
发表于 2008-2-19 00:26:17 | 只看该作者
我是越走越远了, 技术跟不上你们了.
不知有没有API 获取到 弹出窗体的Activate事件 或者 取得窗体获得焦点的消息 (Access此事件无反应) 最近为这个问题伤了脑筋
5#
 楼主| 发表于 2008-2-19 11:08:47 | 只看该作者
用来处理什么事情的?
如果是传递数值,并执行相关的命令,我一般是通过公共变量和TIMER事件来解决

点击这里给我发消息

6#
发表于 2008-2-19 15:54:53 | 只看该作者
是不是这个函数用来自定义ACCESS运行繁忙时显示的指针形状?

点击这里给我发消息

7#
发表于 2008-2-19 16:00:53 | 只看该作者
是不是可以视为 Screen.MousePointer  的扩充
8#
 楼主| 发表于 2008-2-19 16:09:20 | 只看该作者
原帖由 t小宝 于 2008-2-19 15:54 发表
是不是这个函数用来自定义ACCESS运行繁忙时显示的指针形状?


  是的,根据相关的参数,完全可以自定义程序运行的指针型态

点击这里给我发消息

9#
发表于 2008-2-19 17:12:28 | 只看该作者
主要是想知道 用户 现在打开的是哪个窗体, 如果切换到另一个窗体, 我可知道他的当前位置
10#
 楼主| 发表于 2008-2-19 17:36:16 | 只看该作者
GetLastActivePopup代表最近激活过的弹出式窗口的句柄,具体没测试过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-3 15:56 , Processed in 0.087042 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表