在一些流行的应用软件中,均采用了无标题栏的窗体设计,显得时尚美观。在VB中,只要将“caption”属性设为空即可实现。不过问题随之而来:一旦窗体栏消失,怎样实现窗体的移动呢?经过试验总结出如下代码,现与大家共享:
首先,新建“工程1”,将Form1的“Caption”属性设为空,在窗体的通用声明区中加入如下代码:
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long '获取鼠标位置
Private Type POINTAPI
x As Long
y As Long
End Type
Dim zb As POINTAPI 'zb是存放坐标的变量
Dim cx As Integer
Dim cy As Integer
Dim moveit As Boolean
注:以上的GetCursorPos API函数及POINTAPI类型可由VB自带的“API浏览器”中得到。
窗体代码如下:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
moveit = True '按下鼠标,进入可移动状态。
cx = x 'cx记录下鼠标此时在窗体中的横坐标。
cy = y 'cy记录下鼠标此时在窗体中的纵坐标。
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
moveit = False '鼠标弹起,移动结束。
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If moveit = True Then
GetCursorPos z '得到鼠标的位置
Form1.Move z.x * 15 - cx - 65, z.y * 15 - cy - 350 '这行代码是核心!由于VB中的缺省坐标单位是“Twips”,而用GetCursorPos得到的坐标是以“Pixel”为单位的。所以应将“z.x”,“z.y”转化为以“Twips”为单位的数值,“15(以分辨率为800*600为准)”就是Screen.Width与Screen.TwipsPerPixelX或(Screen.Height与Screen.TwipsPerPixelY)的比值,若屏幕使用其他的分辨率可依此类推。减去cx与cy为了使窗体从原地开始移动(大家可以去掉cx与cy,再看一看结果就明白了)。由于窗体的标题栏(虽然消失但移动还是以它为准)与边框有一定的高度和宽度,会造成开始移动时的窗体定位不精确,反复实践发现以上算法最合适。
End If
End Sub
按下“F5”键,效果不错吧!
供大家参考!!!!!!
您知道以下这些扩展名都是 VB 指定给【设计阶段文件】的扩展名吗?
(LOVESHE)
扩展名 用於
VB6 VB5 VB4-32 VB4-16 VB3
.bas Basic 模组
* * * * *
.cls 物件类别模组
* * * *
.ctl 使用者控制项文件
* *
.ctx 使用者控制项二进位文件
* *
.dca 现用设计师快取文件
* *
.dep 安装精灵附属文件
* *
.dob 使用者文件表单
* *
.dox 使用者文件二进位表单文件
* *
.dsr 现用设计师文件
* *
.dsx 现用设计师二进位文件
* *
.frm 表单文件
* * * * *
.frx 二进位表单文件
* * * * *
.log 载入错误的记录档
* * * * *
.oca 控制项 Typelib 文件
* * * *
.pag 属性页文件
* *
.pgx 二进位属性页文件
* *
.res 资源档
* * * *
.swt Visual Basic 安装精灵范本文件
* *
.tlb Remote Automation Typelib 文件
* *
.vbg Visual Basic 群组专案
* *
.vbl 使用者控制项授权文件
* *
.vbp Visual Basic 专案
* * * *
.vbr Remote Automation 注册文件
* * * *
.vbw Visual Basic 专案工作区
* *
.vbz 精灵启动文件
* * * * *
.wct Webclass 范本文件
*
.ocx 控制项文件 * * * *
.vbx 控制项文件 * *
.mak Visual Basic 专案 * * * * *
我很想结交一些VB之类的高手。。