VB.NET鼠标拖动无边框窗体改变窗体大小 100

VB.NET中鼠标拖动无边框窗体改变窗体大小要怎么实现要求用API,非API方法请不用回复,这个我会,谢谢... VB.NET中鼠标拖动无边框窗体改变窗体大小要怎么实现
要求用API,非API方法请不用回复,这个我会,谢谢
展开
 我来答
00715814
2012-04-10 · TA获得超过367个赞
知道答主
回答量:289
采纳率:0%
帮助的人:101万
展开全部
在VB中,BorderStyle属性为0的窗体没有边框,并且也没有与边框相关的元素。这种窗体具有简洁、占用空间少等优点,用它可以设计出某些富有个性的窗体。但是,由于它没有标题栏,窗体不能移动,同时也不能改变大小,在某些情况下会给使用者造成一定的麻烦。本文介绍在VB中如何用API函数操作无边框窗体。

移动窗体

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

  Option Explicit

  Private Declare Function ReleaseCapture Lib “user32” ()AsLong

  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,XAs Single, Y As Single)

  按下鼠标左键

  If Button = vbcenterButton 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 hwndAsLong, lpRect As RECT) As Long

  取得鼠标位置的函数

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

  鼠标位置变量

  Private Type POINTAPI

  x As Long

  y As Long

  End Type

  窗体位置变量

  Private Type RECT

  center As Long

  Top As Long

  center 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.center + 5 And MyPoint.y <="" p="">

  Screen.MousePointer = vbSizeNWSE

  Action = “centerUp”

  鼠标位于窗体右下方

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

  Screen.MousePointer = vbSizeNWSE

  Action = “centerDown”

  鼠标位于窗体右上方

  Case MyPoint.x > MyRect.center - 5 And MyPoint.y<="" p="" +="">

  ’45度双向鼠标指针

  Screen.MousePointer = vbSizeNESW

  Action = “centerUp”

  鼠标位于窗体左下方

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

  Screen.MousePointer = vbSizeNESW

  Action = “centerDown”

  鼠标位于窗体左边

  Case MyPoint.x < MyRect.center + 5

  水平双向鼠标指针

  Screen.MousePointer = vbSizeWE

  Action = “center”

  鼠标位于窗体右边热门推荐: C++程序设计之四书五经 谈谈JAVA程序的反编译1 2

  MyRect.center - 5

  Screen.MousePointer = vbSizeWE

  Action = “center”

  鼠标位于窗体上方

  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函数由系统向窗口发送改变大小的信息时,只要将上面移动窗体的语句“SendMessageMe.hwnd,WM_SYSCOMMAND, SC_MOVE, 0”中的第3个参数改为相应的常数即可。

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

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

  按下鼠标左键

  If Button = vbcenterButton Then

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

  ReleaseCapture

  Select Case Action

  Case “center”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF001, 0

  Case “center”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF002, 0

  Case “Up”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF003, 0

  Case “centerUp”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF004, 0

  Case “centerUp”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF005, 0

  Case “Down”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF006, 0

  Case “centerDown”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF007, 0

  Case “centerDown”

  SendMessage Me.hwnd, WM_SYSCOMMAND, &HF008, 0

  Case “Move”

  SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

  End Select

  End If

  End Sub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式