电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

窗体迁移大法


发布日期:2019/7/16
 

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

方法一

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

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

PrivateTypePOINT

XAsSingle

YAsSingle

EndType

DimFormPAsPOINT

记录窗体原始位置

DimMousePAsPOINT

记录鼠标按下时的位置

DimMouseLButtonDownAsBoolean

记录鼠标左键是否按下

PrivateSubCommand_Click()

End退出程序

EndSub

PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

FormPX=FormLeft

记下窗体原始坐标位置

FormPY=FormTop

MousePX=X

记下鼠标按下时的位置

MousePY=Y

IfButton=Then

MouseLButtonDown=True

鼠标左键按下

EndIf

EndSub

PrivateSubForm_MouseMove(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

IfMouseLButtonDownThen

FormLeft=FormPX (XMousePX)移动窗体

FormTop=FormPY (YMousePY)

EndIf

EndSub

PrivateSubForm_MouseUp(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

MouseLButtonDown=False

鼠标左键弹起

EndSub

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

方法二

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

PrivateDeclareFunctionReleaseCaptureLibuser()AsLong

PrivateDeclareFunctionSendMessageLibuserAliasSendMessageA(ByValhwndAsLong

ByValwMsgAsLongByValwParamAsLonglParamAsAny)AsLong

PrivateConstWM_NCLBUTTONDOWN=&&HA

PrivateConstHTCAPTION=

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

PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

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

IfButton=Then

CallReleaseCapture

CallSendMessage(hwndWM_NCLBUTTONDOWNHTCAPTION)

EndIf

EndSub

PrivateSubCommand_Click()

End退出程序

EndSub

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

以上程序在VB和WindowsSE下调试通过

上一篇:连锁中心配送系统:连锁店模块的管理[3]

下一篇:GridView根据值的变化改变行列样式