您现在的位置:中国下载站学院中心网络编程Visual Basic教程Visual Basic实例教程 → 文章列表

窗体迁移大法

作者:佚名  来源:不详  发布时间:2006-12-29 13:23:51   

减小字体 增大字体

 
 
有很多软件为了实现特殊的显示效果,采用非矩形的窗体,而这些窗体往往没有标题栏。想要移动一个没有标题栏的窗口是不那么容易的。下面我介绍两种在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下调试通过。


itbulo.com/post.php?action=newthread&fid=51&extra=page%3D1" title="如有错误,麻烦请及时告诉我们,谢谢。" target="_blank">我要纠错】【itbulo.com/" target="_blank">进入论坛交流】【关闭此页】【iTbulo.net/" class="lblue" target="_blank">进入博客】

在百度中搜索更多窗体迁移大法相关网页 转贴于:中国下载站

  • 上一篇文章:VisualBasic编程访问WMI对象
  • 下一篇文章:利用VB6.0开发基于IIS的应用程序
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!