vb 无边框自绘界面,拖拉窗体大小!

当Borderstyle=None时我用图片控件画的界面,但窗体上下左右都使用了图片界面,完全挡住窗体了,请教如何实现拖拉窗体大小,网上找了好几个代码,可以拖拉窗体大小,... 当Borderstyle=None 时

我用图片控件画的界面,但窗体上下左右都使用了图片界面,完全挡住窗体了,

请教如何实现 拖拉窗体大小,

网上找了好几个代码,可以拖拉窗体大小 ,但当窗体四边都布满图件控件挡住,就不行了,

请指点,谢谢!
希望高手们给个实例,感谢了
展开
 我来答
ljl88900
2011-08-08 · TA获得超过2661个赞
知道大有可为答主
回答量:2197
采纳率:100%
帮助的人:2635万
展开全部
以下方法不管窗体是否填满图片,均可把鼠标移到窗体边缘进行拖放,改变大小。
一、把下面代码复制到一个模块中:
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边框啊,
damyzl
2011-08-06 · TA获得超过1586个赞
知道大有可为答主
回答量:1475
采纳率:74%
帮助的人:904万
展开全部
无边框窗体要实现拉缩放通常是自己定义一个“边距”,比如四边向内10个像素,结合MouseDown和MouseMove实现。
在窗体上的所有控件不能移动到这个“边距”内。你既要用图片控件布满整个窗体又要利用窗体的事件来实现拖拉缩放,显然是不现实的。
总之就是把你的图片控件的显示范围限制在边距以内就可以了,不然操作起来会非常麻烦。
追问
如果图片和窗体有一定距离,哪不是严重影响了界面效果吗,例如QQ等软件 ,都是到边的啊
追答
仔细注意下就可以发现,QQ是有边框“厚度“的!做的巧妙些不会影响整体效果。
另外说一句,QQ的窗体很可能是自己开发的,你如果要在标准窗体上“动手术”,限制当然大些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刘越hippo
2011-08-08 · 超过14用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:33.5万
展开全部
我花了近半个小时帮你做了一个类似的程序:
当用户点击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
追问
感谢你的帮助 ,经过测试,你的代码没有任何作用!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
教师小站
2011-08-06 · TA获得超过2157个赞
知道大有可为答主
回答量:1350
采纳率:0%
帮助的人:768万
展开全部
你是要移动窗体呢,还是要修改窗体大小,还是两个都要?
追问
只要拖拉窗体 大小 ,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式