您的位置:逆风者 VB 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:31 来源:未知

本文章共2361字,分2页,当前第1页,快速翻页:
 
在VB中,BorderStyle属性为0的窗体没有边框,并且也没有与边框相关的元素。这种窗体具有简洁、占用空间少等优点,用它可以设计出某些富有个性的窗体。但是,由于它没有标题栏,窗体不能移动,同时也不能改变大小,在某些情况下会给使用者造成一定的麻烦。本文介绍在VB中如何用API函数操作无边框窗体。

逆风编程精品
移动窗体

新建一标准工程,设置Form1的BorderStyle属性为0。此时运行程序后,无法移动窗体。为能移动窗体,在Form1的代码窗口声明下列函数和常数:

Option Explicit

Private Declare Function ReleaseCapture Lib “user32” () As Long

Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_SYSCOMMAND = &H112

Const SC_MOVE = &HF012

在Form_MouseDown事件中输入以下代码:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'按下鼠标左键

If Button = VBLeftButton Then

'为当前的应用程序释放鼠标捕获

ReleaseCapture

'移动窗体

SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

End If

End Sub

注意:此时窗体上不能放置除Shape控件以外的任何控件,否则,在被控件遮住的地方点按鼠标还是无法移动窗体。要使点按控件也能移动窗体,需再添加一个该控件的MouseDown事件过程,代码与上述过程代码相似。

改变窗体的大小

为了改变窗体的大小,需要添加一个Timer控件,以定时捕获鼠标在窗体中的位置。当鼠标位于窗体边缘时,改变鼠标的形状,以通知用户可以进行改变大小的操作。为此,将Timer控件的Interval属性设为100(即每过100毫秒检测一下鼠标位置),其他取默认值。

在Form1的代码窗口中再添加下列两个函数,并定义两个自定义变量和一个字符串变量:

'取得窗体位置的函数

Private Declare Function GetWindowRect Lib “user32” (ByVal hwnd As Long, lpRect As RECT) As Long

'取得鼠标位置的函数

Private Declare Function GetCursorPos Lib “user32” (lpPoint As POINTAPI) As Long

'鼠标位置变量

Private Type POINTAPI

x As Long

y As Long

End Type

'窗体位置变量

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

'所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小

Dim Action As String

在Timer1控件的Timer事件过程中添加以下代码:

Private Sub Timer1_Timer()

Dim MyRect As RECT

Dim MyPoint As POINTAPI

' MyRect返回当前窗口位置

Call GetWindowRect(Me.hwnd, MyRect)

' MyPoint返回当前鼠标位置

Call GetCursorPos(MyPoint)

Select Case True

'鼠标位于窗体左上方

Case MyPoint.x < MyRect.Left + 5 And MyPoint.y < MyRect.Top + 5

Screen.MousePointer = VBSizeNWSE

Action = “LeftUp”

'鼠标位于窗体右下方

Case MyPoint.x > MyRect.Right - 5 And MyPoint.y > MyRect.Bottom - 5

Screen.MousePointer = VBSizeNWSE

Action = “RightDown”

'鼠标位于窗体右上方

Case MyPoint.x > MyRect.Right - 5 And MyPoint.y < MyRect.Top + 5

'45度双向鼠标指针

Screen.MousePointer = VBSizeNESW

Action = “RightUp”

'鼠标位于窗体左下方

Case MyPoint.x < MyRect.Left + 5 And MyPoint.y > MyRect.Bottom - 5

Screen.MousePointer = VBSizeNESW

Action = “LeftDown”

'鼠标位于窗体左边

Case MyPoint.x < MyRect.Left + 5

'水平双向鼠标指针

Screen.MousePointer = VBSizeWE

Action = “Left”

'鼠标位于窗体右边
 

本文章更多内容1 - 2 - 下一页>>
相关文章

通往 Internet 的捷径---捷径档的结构
VB编程步步高-打印篇(一)
VB6.0开发网络应用的5个技巧
用FreeFile防止文件打开冲突
用Visual Basic的Move方法实现动画效果
在VB中制作单独程序封面的两种方法
VB数组小技巧一则
Windows API的作用及使用技巧
用VB编写网络寻呼机
如何在VB中截获shell程序的输出
利用子类处理技术限制窗体的大小
使用VB开发Windows环境下的串行通信程序
使用文件的默认的打开方式
菜单项的动态装入
VB查找并替换WORD文档中的字符串
让 Visual Basic程序在 Windows 启动时自动
VB利用高级音频函数编写多媒体播放器
VB中使用SQL查询语句
VB图像处理之几个常用滤镜的实现
在抓取资料库之资料前先计算资料总笔数

相关评论


本文章所属分类:首页 VB

  热门关键字: