操作VB中的无边框窗体

酉卒酉告baby

酉卒酉告baby

2016-02-19 18:27

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

'窗体位置变量

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

LeftAsLong

TopAsLong

RightAsLong

BottomAsLong

EndType

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

DimActionAsString

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

PrivateSubTimer1_Timer()

DimMyRectAsRECT

DimMyPointAsPOINTAPI

'MyRect返回当前窗口位置

CallGetWindowRect(Me.hwnd,MyRect)

'MyPoint返回当前鼠标位置

CallGetCursorPos(MyPoint)

SelectCaseTrue

'鼠标位于窗体左上方

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)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)'按下鼠标左键

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

->

展开更多 50%)
分享

猜你喜欢

操作VB中的无边框窗体

编程语言 网络编程
操作VB中的无边框窗体

VB.NET 拖动无边框的窗体

电脑网络
VB.NET 拖动无边框的窗体

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

无边框窗口代码详解

Java JAVA基础
无边框窗口代码详解

VB和VB.NET中的XML操作

vb
VB和VB.NET中的XML操作

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VB中控件大小随窗体大小变化

编程语言 网络编程
VB中控件大小随窗体大小变化

在VB中实现窗体的动态效果

编程语言 网络编程
在VB中实现窗体的动态效果

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

怎么输入密钥升级到 Windows 8?

怎么输入密钥升级到 Windows 8?

浅谈Ajax技术与ERP

浅谈Ajax技术与ERP
下拉加载更多内容 ↓