首 页  资讯中心 下载中心 资讯教程 最新下载 发布软件 发布文章 网通站 电信站繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:曾子源码软件下载站 -> 网络编程 -> asp.net -> 文章内容 退出登录 用户管理
热门文章
· 常用C,VC,C++书籍下..
· 新概念英语视频教程..
· 常用 JAVA JAVA2 J..
· 《梦幻麻将馆9雀圣争..
· 新东方英语视频教程..
· 常用VB,Visual Basi..
· [组图] After Effect..
· WINDOWS 所有系统文..
· [组图] 让机器运行多..
· 全美经典学习指导系..
相关文章
· VBScript教程 第十三..
· 结合JavaScript与AS..
· ASP.NET窗体对话框的..
· 使用反射将业务对象..
· 使用反射实现根据名..
· 可拖动的无标题栏窗..
· .net中窗体的调整
窗体迁移大法
作者: AspCool     来源:不详  发布时间:2006-6-12 22:03:15  发布人:admin

减小字体 增大字体

     有很多软件为了实现特殊的显示效果,采用非矩形的窗体,而这些窗体往往没有标题栏。想要移动一个没有标题栏的窗口是不那么容易的。下面我介绍两种在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下调试通过。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [发表评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站信息排名查询
Copyright © 2004-2006 Zasp.Net. All Rights Reserved .