窗体迁移大法

原文:http://develop.csai.cn/dotnet/200702141004021694.htm

窗体迁移大法

有很多软件为了实现特殊的显示效果,采用非矩形的窗体,而这些窗体往往没有标题栏。想要移动一个没有标题栏的窗口是不那么容易的。下面我介绍两种在VB中采取不同原理的方法移动一个没有标题栏的窗口。

方法一

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

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

PrivateTypePOINT

XAsSingle

YAsSingle

EndType

DimFormPAsPOINT

'记录窗体原始位置

DimMousePAsPOINT

'记录鼠标按下时的位置

DimMouseLButtonDownAsBoolean

'记录鼠标左键是否按下

PrivateSubCommand1_Click()

End'退出程序

EndSub

PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

FormP.X=Form1.Left

'记下窗体原始坐标位置

FormP.Y=Form1.Top

MouseP.X=X

'记下鼠标按下时的位置

MouseP.Y=Y

IfButton=1Then

MouseLButtonDown=True

'鼠标左键按下

EndIf

EndSub

PrivateSubForm_MouseMove(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

IfMouseLButtonDownThen

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

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

EndIf

EndSub

PrivateSubForm_MouseUp(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

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.0Windows98SE下调试通过。

[@more@]

有很多软件为了实现特殊的显示效果,采用非矩形的窗体,而这些窗体往往没有标题栏。想要移动一个没有标题栏的窗口是不那么容易的。下面我介绍两种在VB中采取不同原理的方法移动一个没有标题栏的窗口。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8072212/viewspace-899694/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8072212/viewspace-899694/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值