vb 无边框自绘界面,拖拉窗体大小!
当Borderstyle=None时我用图片控件画的界面,但窗体上下左右都使用了图片界面,完全挡住窗体了,请教如何实现拖拉窗体大小,网上找了好几个代码,可以拖拉窗体大小,...
当Borderstyle=None 时
我用图片控件画的界面,但窗体上下左右都使用了图片界面,完全挡住窗体了,
请教如何实现 拖拉窗体大小,
网上找了好几个代码,可以拖拉窗体大小 ,但当窗体四边都布满图件控件挡住,就不行了,
请指点,谢谢!
希望高手们给个实例,感谢了 展开
我用图片控件画的界面,但窗体上下左右都使用了图片界面,完全挡住窗体了,
请教如何实现 拖拉窗体大小,
网上找了好几个代码,可以拖拉窗体大小 ,但当窗体四边都布满图件控件挡住,就不行了,
请指点,谢谢!
希望高手们给个实例,感谢了 展开
4个回答
展开全部
以下方法不管窗体是否填满图片,均可把鼠标移到窗体边缘进行拖放,改变大小。
一、把下面代码复制到一个模块中:
Option Explicit
'拖动控件声明
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'拖动控件
Sub ControlSize(ControlName As Object, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
二、调用举例:
Private Sub Form_Load()
ControlSize Me, True
End Sub
一、把下面代码复制到一个模块中:
Option Explicit
'拖动控件声明
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'拖动控件
Sub ControlSize(ControlName As Object, SetTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(ControlName.hwnd, GWL_STYLE)
If SetTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(ControlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos ControlName.hwnd, 0, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
二、调用举例:
Private Sub Form_Load()
ControlSize Me, True
End Sub
追问
你这个好像是改变窗体样式,有这样的3d边框啊,
展开全部
无边框窗体要实现拉缩放通常是自己定义一个“边距”,比如四边向内10个像素,结合MouseDown和MouseMove实现。
在窗体上的所有控件不能移动到这个“边距”内。你既要用图片控件布满整个窗体又要利用窗体的事件来实现拖拉缩放,显然是不现实的。
总之就是把你的图片控件的显示范围限制在边距以内就可以了,不然操作起来会非常麻烦。
在窗体上的所有控件不能移动到这个“边距”内。你既要用图片控件布满整个窗体又要利用窗体的事件来实现拖拉缩放,显然是不现实的。
总之就是把你的图片控件的显示范围限制在边距以内就可以了,不然操作起来会非常麻烦。
追问
如果图片和窗体有一定距离,哪不是严重影响了界面效果吗,例如QQ等软件 ,都是到边的啊
追答
仔细注意下就可以发现,QQ是有边框“厚度“的!做的巧妙些不会影响整体效果。
另外说一句,QQ的窗体很可能是自己开发的,你如果要在标准窗体上“动手术”,限制当然大些。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我花了近半个小时帮你做了一个类似的程序:
当用户点击command1后即可开始移动主界面
当用户单击右键后即可开始停止主界面
--------------------------------------------------------------------------------------------
代码如下:
'Command1是一个按钮
'picture1是你的那张图片
Public one As Boolean'记录是不是第一次
Public onex As Single'记录第一次的x
Public oney As Single'记录第一次的y
Public canmove As Integer'是否可以移动
Private Sub Command1_Click()
canmove = 1
End Sub
Private Sub Form_Load()
one = False
canmove = 0
End Sub
Private Sub Pictuer1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If canmove = 1 And Button = 1 Then
If one = False Then
onex = X
oney = Y
one = True
End If
If one = True Then
Form1.Top = Form1.Top + (Y - oney)
Form1.Left = Form1.Left + (X - onex)
Else
one = False
End If
End If
If Button = 2 Then
canmove = 0
End If
End Sub
当用户点击command1后即可开始移动主界面
当用户单击右键后即可开始停止主界面
--------------------------------------------------------------------------------------------
代码如下:
'Command1是一个按钮
'picture1是你的那张图片
Public one As Boolean'记录是不是第一次
Public onex As Single'记录第一次的x
Public oney As Single'记录第一次的y
Public canmove As Integer'是否可以移动
Private Sub Command1_Click()
canmove = 1
End Sub
Private Sub Form_Load()
one = False
canmove = 0
End Sub
Private Sub Pictuer1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If canmove = 1 And Button = 1 Then
If one = False Then
onex = X
oney = Y
one = True
End If
If one = True Then
Form1.Top = Form1.Top + (Y - oney)
Form1.Left = Form1.Left + (X - onex)
Else
one = False
End If
End If
If Button = 2 Then
canmove = 0
End If
End Sub
追问
感谢你的帮助 ,经过测试,你的代码没有任何作用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是要移动窗体呢,还是要修改窗体大小,还是两个都要?
追问
只要拖拉窗体 大小 ,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询