操作VB中的无边框窗体
2018-06-17 17:12:11来源:未知 阅读 ()
移动窗体
新建一标准工程,设置Form1的BorderStyle属性为0。此时运行程序后,无法移动窗体。为能移动窗体,在Form1的代码窗口声明下列函数和常数:OptionExplicit
PrivateDeclareFunctionReleaseCaptureLib“user32”()AsLongPrivateDeclareFunctionSendMessageLib“user32”Alias“SendMessageA”(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
ConstWM_SYSCOMMAND=&H112ConstSC_MOVE=&HF012
在Form_MouseDown事件中输入以下代码:PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
'按下鼠标左键IfButton=vbLeftButtonThen
'为当前的应用程序释放鼠标捕获ReleaseCapture
'移动窗体SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0
EndIfEndSub
注意:此时窗体上不能放置除Shape控件以外的任何控件,否则,在被控件遮住的地方点按鼠标还是无法移动窗体。要使点按控件也能移动窗体,需再添加一个该控件的MouseDown事件过程,代码与上述过程代码相似。改变窗体的大小
为了改变窗体的大小,需要添加一个Timer控件,以定时捕获鼠标在窗体中的位置。当鼠标位于窗体边缘时,改变鼠标的形状,以通知用户可以进行改变大小的操作。为此,将Timer控件的Interval属性设为100(即每过100毫秒检测一下鼠标位置),其他取默认值。在Form1的代码窗口中再添加下列两个函数,并定义两个自定义变量和一个字符串变量:
'取得窗体位置的函数PrivateDeclareFunctionGetWindowRectLib“user32”(ByValhwndAsLong,lpRectAsRECT)AsLong
'取得鼠标位置的函数PrivateDeclareFunctionGetCursorPosLib“user32”(lpPointAsPOINTAPI)AsLong
'鼠标位置变量PrivateTypePOINTAPI
xAsLongyAsLong
EndType'窗体位置变量
PrivateTypeRECTLeftAsLong
TopAsLongRightAsLong
BottomAsLongEndType
'所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小DimActionAsString
在Timer1控件的Timer事件过程中添加以下代码:PrivateSubTimer1_Timer()
DimMyRectAsRECTDimMyPointAsPOINTAPI
'MyRect返回当前窗口位置CallGetWindowRect(Me.hwnd,MyRect)
'MyPoint返回当前鼠标位置CallGetCursorPos(MyPoint)
SelectCaseTrue'鼠标位于窗体左上方
CaseMyPoint.x<MyRect.Left+5AndMyPoint.y<MyRect.Top+5Screen.MousePointer=vbSizeNWSE
Action=“LeftUp”'鼠标位于窗体右下方
CaseMyPoint.x>MyRect.Right-5AndMyPoint.y>MyRect.Bottom-5Screen.MousePointer=vbSizeNWSE
Action=“RightDown”'鼠标位于窗体右上方
CaseMyPoint.x>MyRect.Right-5AndMyPoint.y<MyRect.Top+5'45度双向鼠标指针
Screen.MousePointer=vbSizeNESWAction=“RightUp”
'鼠标位于窗体左下方CaseMyPoint.x<MyRect.Left+5AndMyPoint.y>MyRect.Bottom-5
Screen.MousePointer=vbSizeNESWAction=“LeftDown”
'鼠标位于窗体左边CaseMyPoint.x<MyRect.Left+5
'水平双向鼠标指针Screen.MousePointer=vbSizeWE
Action=“Left”'鼠标位于窗体右边
CaseMyPoint.x>MyRect.Right-5Screen.MousePointer=vbSizeWE
Action=“Right”'鼠标位于窗体上方
CaseMyPoint.y<MyRect.Top+5'垂直双向鼠标指针
Screen.MousePointer=vbSizeNSAction=“Up”
'鼠标位于窗体下方CaseMyPoint.y>MyRect.Bottom-5
Screen.MousePointer=vbSizeNSAction=“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
SelectCaseActionCase“Left”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF001,0Case“Right”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF002,0Case“Up”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF003,0Case“LeftUp”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF004,0Case“RightUp”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF005,0Case“Down”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF006,0Case“LeftDown”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF007,0Case“RightDown”
SendMessageMe.hwnd,WM_SYSCOMMAND,&HF008,0Case“Move”
SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0EndSelect
EndIfEndSub
->标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:VB“超频”秘籍之给字符串提速
- VB在CAI编程中的应用 2018-06-17
- VB中播放三维动画编程一例 2018-06-17
- 快速找到选中的OptionButton 2018-06-17
- 让窗体居中 2018-06-17
- 把Outlook信箱中的附件另存为 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash