操作VB中的无边框窗体

2016-02-19 18:27 8 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的操作VB中的无边框窗体教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

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

移动窗体

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

OptionExplicit

PrivateDeclareFunctionReleaseCaptureLib“user32”()AsLong

PrivateDeclareFunctionSendMessageLib“user32”Alias“SendMessageA”(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong

ConstWM_SYSCOMMAND=&H112

ConstSC_MOVE=&HF012

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

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

'按下鼠标左键

IfButton=vbLeftButtonThen

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

ReleaseCapture

'移动窗体

SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0

EndIf

EndSub

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

改变窗体的大小

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

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

'取得窗体位置的函数

PrivateDeclareFunctionGetWindowRectLib“user32”(ByValhwndAsLong,lpRectAsRECT)AsLong

'取得鼠标位置的函数

PrivateDeclareFunctionGetCursorPosLib“user32”(lpPointAsPOINTAPI)AsLong

'鼠标位置变量

PrivateTypePOINTAPI

xAsLong

yAsLong

EndType

'窗体位置变量

PrivateTypeRECT

LeftAsLong

TopAsLong

RightAsLong

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)BottomAsLong

EndType

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

DimActionAsString

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

PrivateSubTimer1_Timer()

DimMyRectAsRECT

DimMyPointAsPOINTAPI

'MyRect返回当前窗口位置

CallGetWindowRect(Me.hwnd,MyRect)

'MyPoint返回当前鼠标位置

CallGetCursorPos(MyPoint)

SelectCaseTrue

'鼠标位于窗体左上方

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)CaseMyPoint.xMyRect.Left+5AndMyPoint.yMyRect.Top+5

Screen.MousePointer=vbSizeNWSE

Action=“LeftUp”

'鼠标位于窗体右下方

CaseMyPoint.xMyRect.Right-5AndMyPoint.yMyRect.Bottom-5

Screen.MousePointer=vbSizeNWSE

Action=“RightDown”

'鼠标位于窗体右上方

CaseMyPoint.xMyRect.Right-5AndMyPoint.yMyRect.Top+5

'45度双向鼠标指针

Screen.MousePointer=vbSizeNESW

Action=“RightUp”

'鼠标位于窗体左下方

CaseMyPoint.xMyRect.Left+5AndMyPoint.yMyRect.Bottom-5

Screen.MousePointer=vbSizeNESW

Action=“LeftDown”

'鼠标位于窗体左边

CaseMyPoint.xMyRect.Left+5

'水平双向鼠标指针

Screen.MousePointer=vbSizeWE

Action=“Left”

'鼠标位于窗体右边

CaseMyPoint.xMyRect.Right-5

Screen.MousePointer=vbSizeWE

Action=“Right”

'鼠标位于窗体上方

CaseMyPoint.yMyRect.Top+5

'垂直双向鼠标指针

Screen.MousePointer=vbSizeNS

Action=“Up”

'鼠标位于窗体下方

CaseMyPoint.yMyRect.Bottom-5

Screen.MousePointer=vbSizeNS

Action=“Down”

'鼠标位于窗体其他位置

CaseElse

'默认鼠标指针

Screen.MousePointer=0

Action=“Move”

EndSelect

EndSub

当利用SendMessage函数由系统向窗口发送改变大小的信息时,只要将上面移动窗体的语句“SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0”中的第3个参数改为相应的常数即可。

VB中&HF001~&HF008分别是从左、右、上、左上、右上、下、左下、右下8个方向改变窗体大小的常数。结合移动窗体的代码,将上述Form_MouseDown事件的代码综合如下(也可以把这8个常数声明为自定义常数):

PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)

'按下鼠标左键

IfButton=vbLeftButtonThen

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

ReleaseCapture

SelectCaseAction

Case“Left”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF001,0

Case“Right”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF002,0

Case“Up”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF003,0

Case“LeftUp”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF004,0

Case“RightUp”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF005,0

Case“Down”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF006,0

Case“LeftDown”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF007,0

Case“RightDown”

SendMessageMe.hwnd,WM_SYSCOMMAND,&HF008,0

Case“Move”

SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0

EndSelect

EndIf

EndSub

->

来源:http://www.tulaoshi.com/n/20160219/1617740.html

延伸阅读
当你在窗体上加入Timer控件时,它只出现在设计时,而不会在运行时出现可见的控件图标。Timer控件带有两个重要的参数。Interval(间隔)属性用来确定Timer控件多久触发一次,其单位为毫秒,因此当该值为500时,就表示一秒钟会触发两次。Enabled(使能)属性用来确定Timer控件是运行(Enabled=True)还是停止(Enabled=False)状态。 实际...
努比亚Z9无边框新机上手试玩   努比亚今天在北京举办新品发布会,正式发布了年度旗舰手机nubia Z9,采用无边框设计,售价3499元起。nubia Z9与此前发布的Z9  Max和Z9  mini设计风格类似,采用了双弧面玻璃和金属中框,并且加入了对称美学。配备了夏普定制的5.2英寸显示屏,分辨率为1080p级别。液晶屏本身黑边仅0.8毫米,利...
标签: 软件教程
 距离乐视超级手机发布还有一个星期,到时候传说中要颠覆苹果的超级手机将正式亮相,离发布会越近,很多人似乎等不及想一顿芳容了,下面就看下乐视超级手机的曝光照片吧。 昨天,在微博上公布了一张超级手机亮屏谍照。该用户表示,这款超级手机的型号为X608,应该是移动4G版本。 从谍照正...
窗体的Initialize事件------窗体的Load事件------窗体的Activate事件------窗体的QueryUnload事件------窗体的Unload事件 可以新建一个VB窗体,在窗体中写下面代码测试: Private Sub Form_Activate() MsgBox "窗体的Activate事件" End Sub Private Sub Form_Initialize() MsgBox "窗体的Initialize事件" End Sub Private Sub Form_Load() ...
1、建立和删除目录 你可以用MKDIR语句建立一个新目录,可以用RMDIR语句删除一个目录。下面是一个例子: mkdir"c:data" rmdir"c:data" 2、改变当前目录: 可用CHDIR改变当前目录为指定目录,例如: CHDIR"C:WINDOWS" 如果想改变当前目录为应用程序所在的目录,可以使用APP.PATH实现,例如: ...

经验教程

808

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部