定制化窗体之限制鼠标在窗体内移动

定制化窗体之限制鼠标在窗体内移动(1)

2007-12-12 15:32

主     题

定制化窗体之限制鼠标在窗体内移动

版     本

Excel2000及其以后版本

说     明

本示例运用API函数来定制Excel中的用户窗体,使鼠标只能在窗体内移动。(Code By 王明柏)

在有的程序中,其可以限制鼠标只能在窗体内(包括标题栏等)移动。其实在VBA的用户窗体也可以做到。实现过程如下:

l         在Excel 的VBE窗口中插入一个用户窗体,将其命名为 ClipCursorForm。在用户窗体中添加一个 C ommandButton 控件,然后再添加一个模块。在窗体和模块中添加后面所列代码。

l         在工作薄中的任意工作表中添加一窗体按钮控件,将指定其 设置宏 为 ShowForm。其供示范之用

l         代码:

模块1代码

Option Explicit

'//****************************************************************************************************************************************

'// 此模块创建了一个回调函数和按钮调用程序

'//****************************************************************************************************************************************

'//将指针限制到指定区域

Private Declare Function ClipCursor _

Lib "user32" ( _

lpRect As RECT) _

As Long

'//返回指定窗口的屏幕坐标

Private Declare Function GetWindowRect _

Lib "user32" ( _

ByVal Hwnd As Long, _

lpRect As RECT) _

As Long

'//查找窗口句柄

Private Declare Function FindWindow _

Lib "user32" _

Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) _

As Long

'//以下定义类型

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

'//以下定义变量

Private FormRect As RECT

'//****************************************************************************************************************************************

'// 此过程为工作表中按钮调用

'//****************************************************************************************************************************************

Sub ShowForm()

'//显示窗体

ClipCursorForm.Show

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

'//****************************************************************************************************************************************

'//Settimer函数的回调函数

'//****************************************************************************************************************************************

Public Function TimeOutProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long

Dim HwndForm As Long

'//取得窗口句柄

HwndForm = FindWindow(vbNullString, ClipCursorForm.Caption)

'//取得窗体的屏幕坐标

GetWindowRect HwndForm, FormRect

'//限制鼠标活动区域

ClipCursor FormRect

End Function

定制化窗体之限制鼠标在窗体内移动(2)

2007-12-12 15:33

ClipCursorForm窗体代码:

Option Explicit

'//****************************************************************************************************************************************

'//此程序演示将鼠标限制在窗体内

'//****************************************************************************************************************************************

'//将指针限制到指定区域

Private Declare Function ClipCursor _

Lib "user32" ( _

lpRect As RECT) _

As Long

'//设置Settimer过程

Private Declare Function SetTimer _

Lib "user32" ( _

ByVal Hwnd As Long, _

ByVal nIDEvent As Long, _

ByVal uElapse As Long, _

ByVal lpTimerfunc As Long) _

As Long

'//结束Settimer过程

Private Declare Function KillTimer _

Lib "user32" ( _

ByVal Hwnd As Long, _

ByVal nIDEvent As Long) _

As Long

'//清除指针剪切区域

Private Declare Function ClipCursorBynum _

Lib "user32" _

Alias "ClipCursor" ( _

ByVal lpRect As Long) _

As Long

'//返回指定窗口的屏幕坐标

Private Declare Function GetWindowRect _

Lib "user32" ( _

ByVal Hwnd As Long, _

lpRect As RECT) _

As Long

'//查找窗口句柄

Private Declare Function FindWindow _

Lib "user32" _

Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) _

As Long

'//以下定义类型

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

'//以下定义变量

Private FormRect As RECT, TID As Long, Hwnd As Long

'//****************************************************************************************************************************************

'//                                     过程

'//****************************************************************************************************************************************

Private Sub CommandButton1_Click()

'//卸载窗体

Unload Me

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub UserForm_Activate()

'//取得窗体句柄

Hwnd = FindWindow(vbNullString, Me.Caption)

'//取得窗体的屏幕坐标

GetWindowRect Hwnd, FormRect

'//将鼠标限制在窗体内

ClipCursor FormRect

End Sub

Private Sub UserForm_Initialize()

'//取得窗体句柄

Hwnd = FindWindow(vbNullString, Me.Caption)

'//设置Settimer过程

TID = SetTimer(Hwnd, 0, 10, AddressOf TimeOutProc)

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If TID 0 Then KillTimer Hwnd, TID

'//清除鼠标剪切

ClipCursorBynum 0

End Sub

定制化窗体之限制鼠标在窗体内移动(1)

2007-12-12 15:32

主     题

定制化窗体之限制鼠标在窗体内移动

版     本

Excel2000及其以后版本

说     明

本示例运用API函数来定制Excel中的用户窗体,使鼠标只能在窗体内移动。(Code By 王明柏)

在有的程序中,其可以限制鼠标只能在窗体内(包括标题栏等)移动。其实在VBA的用户窗体也可以做到。实现过程如下:

l         在Excel 的VBE窗口中插入一个用户窗体,将其命名为 ClipCursorForm。在用户窗体中添加一个 C ommandButton 控件,然后再添加一个模块。在窗体和模块中添加后面所列代码。

l         在工作薄中的任意工作表中添加一窗体按钮控件,将指定其 设置宏 为 ShowForm。其供示范之用

l         代码:

模块1代码

Option Explicit

'//****************************************************************************************************************************************

'// 此模块创建了一个回调函数和按钮调用程序

'//****************************************************************************************************************************************

'//将指针限制到指定区域

Private Declare Function ClipCursor _

Lib "user32" ( _

lpRect As RECT) _

As Long

'//返回指定窗口的屏幕坐标

Private Declare Function GetWindowRect _

Lib "user32" ( _

ByVal Hwnd As Long, _

lpRect As RECT) _

As Long

'//查找窗口句柄

Private Declare Function FindWindow _

Lib "user32" _

Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) _

As Long

'//以下定义类型

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

'//以下定义变量

Private FormRect As RECT

'//****************************************************************************************************************************************

'// 此过程为工作表中按钮调用

'//****************************************************************************************************************************************

Sub ShowForm()

'//显示窗体

ClipCursorForm.Show

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

'//****************************************************************************************************************************************

'//Settimer函数的回调函数

'//****************************************************************************************************************************************

Public Function TimeOutProc(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long

Dim HwndForm As Long

'//取得窗口句柄

HwndForm = FindWindow(vbNullString, ClipCursorForm.Caption)

'//取得窗体的屏幕坐标

GetWindowRect HwndForm, FormRect

'//限制鼠标活动区域

ClipCursor FormRect

End Function

定制化窗体之限制鼠标在窗体内移动(2)

2007-12-12 15:33

ClipCursorForm窗体代码:

Option Explicit

'//****************************************************************************************************************************************

'//此程序演示将鼠标限制在窗体内

'//****************************************************************************************************************************************

'//将指针限制到指定区域

Private Declare Function ClipCursor _

Lib "user32" ( _

lpRect As RECT) _

As Long

'//设置Settimer过程

Private Declare Function SetTimer _

Lib "user32" ( _

ByVal Hwnd As Long, _

ByVal nIDEvent As Long, _

ByVal uElapse As Long, _

ByVal lpTimerfunc As Long) _

As Long

'//结束Settimer过程

Private Declare Function KillTimer _

Lib "user32" ( _

ByVal Hwnd As Long, _

ByVal nIDEvent As Long) _

As Long

'//清除指针剪切区域

Private Declare Function ClipCursorBynum _

Lib "user32" _

Alias "ClipCursor" ( _

ByVal lpRect As Long) _

As Long

'//返回指定窗口的屏幕坐标

Private Declare Function GetWindowRect _

Lib "user32" ( _

ByVal Hwnd As Long, _

lpRect As RECT) _

As Long

'//查找窗口句柄

Private Declare Function FindWindow _

Lib "user32" _

Alias "FindWindowA" ( _

ByVal lpClassName As String, _

ByVal lpWindowName As String) _

As Long

'//以下定义类型

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

'//以下定义变量

Private FormRect As RECT, TID As Long, Hwnd As Long

'//****************************************************************************************************************************************

'//                                     过程

'//****************************************************************************************************************************************

Private Sub CommandButton1_Click()

'//卸载窗体

Unload Me

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub UserForm_Activate()

'//取得窗体句柄

Hwnd = FindWindow(vbNullString, Me.Caption)

'//取得窗体的屏幕坐标

GetWindowRect Hwnd, FormRect

'//将鼠标限制在窗体内

ClipCursor FormRect

End Sub

Private Sub UserForm_Initialize()

'//取得窗体句柄

Hwnd = FindWindow(vbNullString, Me.Caption)

'//设置Settimer过程

TID = SetTimer(Hwnd, 0, 10, AddressOf TimeOutProc)

End Sub

'//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If TID 0 Then KillTimer Hwnd, TID

'//清除鼠标剪切

ClipCursorBynum 0

End Sub


相关文章

  • 基于嵌入式的贪食蛇的设计和实现
  • 嵌入式大作业 贪食蛇的设计和实现 作 者 姓 名: 学科.专业 : 学 号 : 指 导 教 师: 完 成 日 期: 大连大学 Dalian University 摘 要 WinCE 是微软公司嵌入式.移动计算平台的基础 它是一个开放的. 可 ...查看


  • 用户界面设计
  • 用户界面设计 简介 在人和机器的互动过程(Human Machine Interaction)中,有一个层面,即我们所说的界面(interface).从心理学意义来分,界面可分为感觉(视觉.触觉.听觉等)和情感两个层次.用户界面设计是屏幕产 ...查看


  • 软件测试功能测试点总结
  • 功能测试点总结 一.功能测试 1.对话框测试输入进行测试.包括中文字符.英文字符.数字字符.特殊字符.及几种字符的组合. 2.对界面可操作按钮进行测试.包括[新增(N)][保存(S)][修改(M)][查询(A)][打印(P)][退出(X)] ...查看


  • 用户界面设计原则
  • 良好的用户界面一般都符合下列的用户界面规范: 1. 易用性原则 按钮名称应该易懂,用词准确,没有摸棱两可的字眼,要与同一界面上的其他按钮易于区分,如能望文知意最好.理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作. 易用 ...查看


  • 软件易用性测试研究
  • 软件易用性测试研究 1 前言 长期以来,IT行业一直有着重视技术创新而忽视人类因素的倾向,这导致多数产品存在程度不同的可用性问题.据研究机构近期对发达国家的统计:商用计算机用户的有效生产率仅有30%-40%:48%的软件缺陷属于可用性问题: ...查看


  • 软件设计方案(案例)
  • 软件设计方案 用户界面设计规范 用户界面:又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件. GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面. 本系统坚持图形用户界面 ...查看


  • C#窗体设计器的使用
  • ∙ ∙ C#窗体设计器开发实例详解 http://developer.51cto.com 2009-09-07 06:18 RonoTian CSDN博客 我要评论(0) C#窗体设计器的开发实例这里主要向你介绍实现控件移动的功能,希望对通 ...查看


  • office办公软件高级应用
  • 第一章 1. 单选题 在Word 2010编辑状态下,绘制一文本框,应使用的选项卡是( ). (B) 开始 (C) 页面布局 (D) 引用 Word 2010的替换功能所在的选项卡是( ). (A) 视图 √ (B) 开始 (C) 插入 ( ...查看


  • 办公软件的讲义
  • 第一讲:电脑的基础 又称为计算机,电子产品,进行信息处理的一种现代化设备. 一. 电脑的组成分两部份:硬件和软件. 硬件:看得到摸得着的一种实体.比方说显示器.主机.鼠标.键盘.打印机.音箱等. 软件:是指已经设计好的一种程序如:TT指法. ...查看


热门内容