请教一个拖动窗口的问题

lingll 2001-04-25 12:29:00
请问如何在拖动窗口时,显示窗口的内容,即不是一个虚框?
...全文
403 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingll 2001-04-26
  • 打赏
  • 举报
回复
to Wuxyingshu(无影石)
其实是我错了,我以为他写的代码跟我一样。后来我修改了那个错误就行了。
但是他的方法比较罗嗦,我给出一个较简洁的方法:

Option Explicit
Dim bgnX As Single, bgnY As Single

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
bgnX = X
bgnY = Y
End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Me.Move Me.Left + X - bgnX, Me.Top + Y - bgnY
End If
End Sub

另外,送上5分(我不知道如何给)
Wuxyingshu 2001-04-26
  • 打赏
  • 举报
回复
我告诉你,为什么windows非要搞这么一个拖动是不是出现窗体的选择,就是怕内存不够。
也就是说,出现窗体是以牺牲程序的性能为代价的。如果你的程序越大,载入的窗体越多。
就更容易出现这种。。。。。。。。。这是我个人的看法
lingll 2001-04-25
  • 打赏
  • 举报
回复
to prefix(MtSC) 
小弟无能,望大哥具体地说一下如何实现。
若嫌分太少,我会加的。
lingll 2001-04-25
  • 打赏
  • 举报
回复
to Wuxyingshu(无影石)
这个方法我已经试过了,确实可以拖动,但是在拖动的过程中,窗体会不断地跳动,并且留下许多“轨迹”(我只能这样形容),效果很差。
不知你试过了吗?
Wuxyingshu 2001-04-25
  • 打赏
  • 举报
回复
这是前面的一张贴子:http://www.csdn.net/expert/topic/4/4455.shtm

不好意思 掠人之美!!!!!!!!!!!!!!!!!!!!!

主  题:如何去掉不规则窗体拖动时讨厌的边框?
作  者:grassdog
所属论坛:Visual Basic
问题点数:50
回复次数:6
发表时间:2000-3-13 0:14:00

在制作不规则窗体时,通常把标题条去掉,而拖动窗体往往用releasecapture+Sendmessage,但总有一个方框!如何去掉它!


回复贴子:
 回复人:E() (2000-3-13 2:56:00) 得0分
没办法,xixi!

 回复人:grievefish() (2000-3-13 10:13:00) 得0分
关注

 回复人:snowgirl() (2000-3-13 14:28:00) 得0分
不要使用默认的拖动方式。
第一步,
me.ControlBox =False
Me.Caption = ""
第二步,采用语句响应
在窗体上做一个按钮或图片来响应拖动(也可以窗体直接响应)
判断点击拖动,计算绝对距离,
Me.Left = Me.Left + x
Me.Top = Me.Top + y
这样窗体就被拖动,现在一般去掉不规则窗体拖动时讨厌的边框都是用这种方法

或者你可以用另一种方法
有一个Activeskin的工具(控件)可以帮你制作任何形状不规则窗体,你可以实现诸多功能,几乎可以不要写什么语句,有兴趣以后联系,再告知详细方法。




 回复人:bjseaman() (2000-3-15 2:03:00) 得0分
不要用ReleaseCapture和SendMessage拖动窗体
可以用以下方法来拖动窗体

比如窗体名字为frmMain,你允许用户拖动picTitleBar来拖动窗体
'定义变量
Dim MoveFrm As Boolean
Dim oldleft As Integer
Dim oldtop As Integer
Dim oldx As Integer
Dim oldy As Integer
'鼠标按下时
Private Sub picTitlebar_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
MoveFrm = True
oldleft = frmMain.Left
oldtop = frmMain.Top
oldx = X + frmMain.Left
oldy = Y + frmMain.Top
End If
End Sub
'鼠标移动时
Private Sub picTitlebar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 And MoveFrm = True Then
Dim thisx As Integer, thisy As Integer
thisx = X + frmMain.Left
thisy = Y + frmMain.Top
frmMain.Left = oldleft + thisx - oldx
frmMain.Top = oldtop + thisy - oldy
End If
End Sub
'鼠标松开时
Private Sub picTitlebar_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
MoveFrm = False
End If
End Sub

以上方法应该可以解决

如果你必须要用ReleaseCapture和SendMessage的方法
又不愿见到边框,就需要改动资源管理器中的文件夹选项中的设置
文件夹选项-〉查看-〉高级设置-〉可视设置-〉拖动窗口的过程显示其内容
这个设置只有windows98有,95好像没有
lingll 2001-04-25
  • 打赏
  • 举报
回复
to fulaoxiao(米米) 
有这么简单么?若能提供源代码,我会非常感谢的(应该回加分吧)
lingll 2001-04-25
  • 打赏
  • 举报
回复
to Wuxyingshu(无影石) 
这个我也知道,但是这样一来其它的窗口也一起变了。
我并不希望这样。
prefix 2001-04-25
  • 打赏
  • 举报
回复
用子类的方法,在WM_MOVINGWINDOW中处理窗口的重画。
Wuxyingshu 2001-04-25
  • 打赏
  • 举报
回复
修改注册表[HKEY_USERS\.DEFAULT\Control Panel\desktop]
"DragFullWindows"="1"
在RunOnce下设置让他重启一次
也是一个办法
在桌面自定义效果栏,选择拖动效果也是一个办法
fulaoxiao 2001-04-25
  • 打赏
  • 举报
回复
自己写一个函数,很简单的。
我就是这样做的。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧