• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
操作VB中的无边框窗体
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
操作VB中的无边框窗体
软件发布 操作VB中的无边框窗体
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 编程技术 >> VB & VB.NET教程 >> 操作VB中的无边框窗体

操作VB中的无边框窗体

添加时间: 2006-2-13 9:45:42  作者: VB教程  阅读次数:207   来源: http://www.d9soft.com

       

  在VB中,BorderStyle属性为0的窗体没有边框,并且也没有与边框相关的元素。这种窗体具有简洁、占用空间少等优点,用它可以设计出某些富有个性的窗体。但是,由于它没有标题栏,窗体不能移动,同时也不能改变大小,在某些情况下会给使用者造成一定的麻烦。本文介绍在VB中如何用API函数操作无边框窗体。

  移动窗体

  新建一标准工程,设置Form1的BorderStyle属性为0。此时运行程序后,无法移动窗体。为能移动窗体,在Form1的代码窗口声明下列函数和常数:

  Option Explicit

  Private Declare Function ReleaseCapture Lib “user32” () As Long

  Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long,

  ByVal wParam As Long, lParam As Any) As Long

  Const WM_SYSCOMMAND = &H112

  Const SC_MOVE = &HF012

  在Form_MouseDown事件中输入以下代码:

  Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

  '按下鼠标左键

  If Button = vbLeftButton Then

  '为当前的应用程序释放鼠标捕获

  ReleaseCapture

  '移动窗体

  SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

  

  End If

  End Sub

  注意:此时窗体上不能放置除Shape控件以外的任何控件,否则,在被控件遮住的地方点按鼠标还是无法移动窗体。要使点按控件也能移动窗体,需再添加一个该控件的MouseDown事件过程,代码与上述过程代码相似。

  改变窗体的大小

  为了改变窗体的大小,需要添加一个Timer控件,以定时捕获鼠标在窗体中的位置。当鼠标位于窗体边缘时,改变鼠标的形状,以通知用户可以进行改变大小的操作。为此,将Timer控件的Interval属性设为100(即每过100毫秒检测一下鼠标位置),其他取默认值。

  在Form1的代码窗口中再添加下列两个函数,并定义两个自定义变量和一个字符串变量:

  '取得窗体位置的函数

  Private Declare Function GetWindowRect Lib “user32” (ByVal hwnd As Long, lpRect As RECT) As Long

  '取得鼠标位置的函数

  Private Declare Function GetCursorPos Lib “user32” (lpPoint As POINTAPI) As Long

  '鼠标位置变量

  Private Type POINTAPI

  

  x As Long

  y As Long

  

  End Type

  '窗体位置变量

  

  Private Type RECT

  Left As Long

  

  Top As Long

  Right As Long

  

  Bottom As Long

  End Type

  '所要执行的动作变量,是移动还是改变大小及从哪个方向改变大小

  Dim Action As String

  在Timer1控件的Timer事件过程中添加以下代码:

  Private Sub Timer1_Timer()

  Dim MyRect As RECT

  Dim MyPoint As POINTAPI

  ' MyRect返回当前窗口位置

  Call GetWindowRect(Me.hwnd, MyRect)

  ' MyPoint返回当前鼠标位置

  Call GetCursorPos(MyPoint)

  Select Case True

  '鼠标位于窗体左上方

  Case MyPoint.x < MyRect.Left + 5 And MyPoint.y < MyRect.Top + 5

  Screen.MousePointer = vbSizeNWSE

  Action = “LeftUp”

  '鼠标位于窗体右下方

  Case MyPoint.x > MyRect.Right - 5 And MyPoint.y > MyRect.Bottom - 5

  Screen.MousePointer = vbSizeNWSE

  Action = “RightDown”

  '鼠标位于窗体右上方

  Case MyPoint.x > MyRect.Right - 5 And MyPoint.y < MyRect.Top + 5

  ’45度双向鼠标指针

  Screen.MousePointer = vbSizeNESW

  Action = “RightUp”

  '鼠标位于窗体左下方

  Case MyPoint.x < MyRect.Left + 5 And MyPoint.y > MyRect.Bottom - 5

  Screen.MousePointer = vbSizeNESW

  Action = “LeftDown”

  '鼠标位于窗体左边

  Case MyPoint.x < MyRect.Left + 5

  

  '水平双向鼠标指针

  Screen.MousePointer = vbSizeWE

  

  Action = “Left”

  '鼠标位于窗体右边

  Case MyPoint.x > MyRect.Right - 5

  Screen.MousePointer = vbSizeWE

  Action = “Right”

  '鼠标位于窗体上方

  Case MyPoint.y < MyRect.Top + 5

  '垂直双向鼠标指针

  Screen.MousePointer = vbSizeNS

  Action = “Up”

  '鼠标位于窗体下方

  Case MyPoint.y > MyRect.Bottom - 5

  Screen.MousePointer = vbSizeNS

  Action = “Down”

  '鼠标位于窗体其他位置

  Case Else

  '默认鼠标指针

  Screen.MousePointer = 0

  Action = “Move”

  End Select

  End Sub

  当利用SendMessage函数由系统向窗口发送改变大小的信息时,只要将上面移动窗体的语句“SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0”中的第3个参数改为相应的常数即可。

  VB中&HF001~&HF008分别是从左、右、上、左上、右上、下、左下、右下8个方向改变窗体大小的常数。结合移动窗体的代码,将上述Form_MouseDown事件的代码综合如下(也可以把这8个常数声明为自定义常数):

  Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)

  '按下鼠标左键

  If Button = vbLeftButton Then

  '为当前的应用程序释放鼠标捕获

  ReleaseCapture

  Select Case Action

  Case “Left”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF001, 0

  Case “Right”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF002, 0

  Case “Up”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF003, 0

  Case “LeftUp”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF004, 0

  Case “RightUp”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF005, 0

  Case “Down”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF006, 0

  Case “LeftDown”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF007, 0

  Case “RightDown”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF008, 0

  Case “Move”

  SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

  End Select

  End If

  End Sub

 

上下文章:

 

上一篇文章: 去掉窗体的关闭按钮 下一篇文章: Shell语句用法心得

相关文章:

  • Windows操作系统的发展简史
  • 将Windows操作系统无毒进行到底
  • Word2007文档的规范化操作方法
  • 魔兽世界达人 一个人操作36个人物
  • 微软将推出新的互联网云操作系统

相关软件:

  • 窗体属性修改专家 2008 中秋特别版
  • 模拟Vista透明窗体 V1.6 绿色版
  • 多操作系统一键恢复 V7.0
  • ajxpform窗体换肤控件 V2.0
  • 窗体监控器 V1.2
  • 操作系统 -- 安装过程详细图解 一步步教你(图片)从98版到Linux

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VB.net2008创建发送与接收端程序
  • C++程序设计之四书五经
  • VB入门教程之四
  • VB入门教程之三
  • VB入门教程之二
  • VB入门教程之一
  • 压缩被DBGIRD控件正在使用的MDB数...
  • 谈谈VB的数据库编程方式
  • 在VB中用DAO实现数据库编程
  • Data控件使用有密码的Access数据库

VB & VB.NET教程阅读排行

  • VB入门教程之一
  • VB入门教程之二
  • VB入门教程之三
  • VB入门教程之四
  • 如何编写高质量的VB代码
  • 初学者必知:VB10个小编程
  • VB访问SQL Server数据库技术全揭密
  • 怎样在VB中控制Word?
  • 用DAO或ADO正确访问Access 2000
  • VB中列表框的使用技巧说明

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • VC++之List Box/Check List Box控...
  • 第二章 PowerBuilder 入门之创建新...
  • VC++ List Ctrl控件
  • 第一章 什么是PowerBuilder
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有