首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > VB > 复习资料 > 正文

计算机等级考试二级VB:自制IE风格按钮控件

来源:考试吧Exam8.com) 2010-8-19 16:35:46 考试吧:中国教育培训第一门户 模拟考场
计算机等级考试二级VB:自制IE风格按钮控件。

  按常规,IE风格按纽的制作原理是,放置四条边线在Image和Label控件四周,在 Image和Label控件的MouseMove事件中,改变左,上,右,下线的Visible 和 BorderColor属性,按纽呈现浮起效果,同时改变Image控件的Picture 属性,调入盘旋(Hover)图片;在Image和Label的MouseDown事件中通过改变Image和Label控件的位置(右下移)按纽呈现按下效果;鼠标离开按纽,按纽恢复平坦(Flat)状态。

  如果你正在这样做,将会发现一个致命的问题。那就是,MouseMove事件只能检测到鼠标在Image和Label两个控件本身范围内的移动,你没有办法检测鼠标的离开。“计算机世界”曾经登载过一个解决的办法,利用SetCapture和ReleaseCapture API函数。经SetCapture设定的控件可以强制性地捕捉鼠标在整个屏幕上的移动。这样,不管鼠标是不是在控件界面范围内移动,控件都可以捕捉得到。经过实践发现这个解决方案仍然存在一个问题,那就是,SetCapture所设定控件在 ReleaseCapture前,自动提示(ToolTipText)功能被抑制。这意味着这样编制的按纽没有自动提示功能,对很多人来说,这难以忍受。

  WIN32 API函数集是个不折不扣的庞大宝藏,你总能从里面找到你需要的工具。 GetCursorPos和WindowFromPoint两个函数可以完美地解决这个问题。 GetCursorPos可以返回鼠标指针相对整个屏幕的坐标,WindowFromPoint 则根据鼠标指针的坐标,返回指针所处的控件的句柄。在这里,还需要引入一个定时器 (Timer)控件。

  整个编程原理是,在UserControl_Show事件中,先将定时器置为无效。在Image和Label的MouseMove事件中,执行使按纽浮起的代码,然后将定时器置为有效,这时定时器开始倒计时,在计时器的Timer事件中,用上述API函数检测鼠标指针是否已经离开了按纽,如果离开,则使按纽恢复平坦状态并立即使计时器无效,否则继续检测。我们看到,计时器的真正用途是用来触发事件,以检测鼠标的离开。将计时器置为无效是为了在不必要的时间,降低计时器对CPU的占用。

  以下是函数和所需数据类型声明。

  Private Type POINTAPI

  X As Long

  Y As Long

  End Type

  Private Declare Function GetCursorPos Lib "user32" _

  (lpPoint As POINTAPI) As Long

  Private Declare Function WindowFromPoint Lib "user32" _

  (ByVal xPoint As Long, ByVal yPoint As Long) As Long

  在VB6.0中新建一个ActiveX Control项目。添加LineLeft,LineTop,LineRight, LineBottom四条边线,一个Image控件Image1,一个Label标签控件Label1,一个定时器控件Timer1。关于用VB创建ActiveX控件的步骤这里不作描述(可以参考本文所附完整源代码)。与按纽制作有关的主要代码如下:

  Private Sub UserControl_Show()

  Timer1.Interval = 1 1/1000 秒

  Timer1.Enabled=False 关闭定时器

  将UserControl的提示信息引入Image1,Label1控件,

  If UserControl.Ambient.UserMode = True Then

  在RunTime

  Image1.ToolTipText = UserControl.Extender.ToolTipText

  Label1.ToolTipText = UserControl.Extender.ToolTipText

  End If

  ......此处添加其它代码

  End Sub

  Private Sub Image1_MouseMove

  (Button As Integer, Shift As Integer, _

  X As Single, Y As Single)

  ....... 此处添加使按纽呈现浮起效果的代码

  Timer1.Enabled = True 打开定时器

  End Sub

  Private Sub Timer1_Timer() 定时器触发

  Dim MousePosition As POINTAPI

  Dim ReturnValue As Long

  Dim HwndHoverWindow As Long

  ReturnValue = GetCursorPos(MousePosition)

  返回鼠标指针坐标

  返回指针所指位置的控件句柄

  HwndHoverWindow = WindowFromPoint

  (MousePosition.X, MousePosition.Y)

  If HwndHoverWindow < > UserControl.hWnd Then

  如果鼠标离开了按纽区域

  ...... 此处添加使按纽恢复平坦状态的代码

  Timer1.Enabled = False 将定时器关闭,

  以释放资源

  End If

  End Sub

  Private Sub Image1_MouseDown

  (Button As Integer, Shift As Integer, _

  X As Single, Y As Single)

  If Button = 1 Then

  ....... 此处添加使按纽呈现按下状态的代码

  End If

  End Sub

  相关推荐:2010年9月计算机等级考试精华备考资料汇总
       2010年计算机等级考试二级公共基础知识教程
       考试吧:2010年计算机等考二级VB预测题汇总
       2010年全国计算机等级考试全攻略(一至四级)
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。