窗体迁移大法_VB.net_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

窗体迁移大法

作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0

本篇关键词:大法迁移窗体移动
黑客防线网安网讯:有很多软件为了实现特殊的显示效果,采用非矩形的窗体,而这些窗体往往没有标题栏。想要移动一个没有标题栏的窗口是不那么容易的。下面我介绍两种在VB中采取不同原理的方法移动一个没有标题...
有很多软件为了实现特殊的显示效果采用非矩形的窗体而这些窗体往往没有标题栏想要移动一个没有标题栏的窗口是不那么容易的下面我介绍两种在VB中采取不同原理的方法移动一个没有标题栏的窗口。

  方法一

  这种方法是在窗体的MouseDown、MouseUp和MouseMove等事件的处理过程中添加代码,实现在鼠标左键按下后移动时,改变窗体的Left和Top属性,实现移动无标题栏的窗体。

  进入VB,把窗体Form1的BorderStyle属性设置为0-None(无标题栏),再窗体上添加一个ButtonCommand组件,用来关闭程序。代码如下:

  PrivateTypePOINT

  XAsSingle

  YAsSingle

  EndType

  DimFormPAsPOINT

  '记录窗体原始位置

  DimMousePAsPOINT

  '记录鼠标按下时的位置

  DimMouseLButtonDownAsBoolean

  '记录鼠标左键是否按下

  PrivateSubCommand1_Click()

  End'退出程序

  EndSub

  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

  FormP.X=Form1.Left

  '记下窗体原始坐标位置

  FormP.Y=Form1.Top

  MouseP.X=X

  '记下鼠标按下时的位置

  MouseP.Y=Y

  IfButton=1Then

  MouseLButtonDown=True

  '鼠标左键按下

  EndIf

  EndSub

  PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

  IfMouseLButtonDownThen

  Form1.Left=FormP.X (X-MouseP.X)'移动窗体

  Form1.Top=FormP.Y (Y-MouseP.Y)

  EndIf

  EndSub

  PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

  MouseLButtonDown=False

  '鼠标左键弹起

  EndSub

  上述方法不是很完善,制作出的窗体被拖动时,窗体会随鼠标的移动而移动。而在默认的Windows设置中拖动窗体时,被拖动的窗体不会随窗体的移动而移动,随窗体移动的仅是一个与窗体形状、大小一样的虚框,只有释放鼠标后,窗体才会移动到释放鼠标时虚框的所在处。要实现这种效果,请看第二种方法。


  方法二

  这种方法通过消息的发送实现移动无标题窗体。当鼠标按下、移动或释放时,将鼠标在窗体上按下的消息(消息值为HTCAPTION)发出,就可以拖动窗体了。代码如下:

  PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong

  PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,

  ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong

  PrivateConstWM_NCLBUTTONDOWN=&&HA1

  PrivateConstHTCAPTION=2

  '以上API函数和常数的声明可在VB自带的“API浏览器”中找到

  PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

  '在窗体的MouseDown事件中添加以下代码

  IfButton=1Then

  CallReleaseCapture

  CallSendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0)

  EndIf

  EndSub

  PrivateSubCommand1_Click()

  End   '退出程序

  EndSub

  这种方法实现起来比第一种方法更容易,只有几行代码,并且没有那么多的变量,窗体被拖动时与普通窗体一样,只有一个虚框随鼠标的移动而移动,当释放鼠标时窗体才移动到相应的位置。用到了两个API函数。

  以上程序在VB6.0和Windows98SE下调试通过。

->

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14647-1.html
网站维护教程更新时间:2012-04-03 01:11:34  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer