回 帖 发 新 帖 刷新版面

主题:[讨论]求对移动无标题栏窗体的正解

我是一个初学者,在网上找了个关于移动无标题栏窗体的代码,如下:
许多Windows下的应用程序,都采用了图形化的界面,这样做的好处是可以使程序界面更漂亮生动,更具吸引力。但是在这样的界面下就不能使用Windows原来的标题条了,否则将会影响界面的美观性。那么在没有标题条的情况下,如何用鼠标拖动窗体呢?或者拖动其它的控件呢?
其实,采用API函数调用很容易实现,下面我们以拖动窗体(Form1)为例来具体讲一下实现方法:
1. 新建立一个项目,名称为:test.vbp.
2. 填加一个模块,名称为:test.bas,并且在声明部分加入以下代码:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012

其中ReleaseCapture函数是用来释放鼠标捕获的,SendMessage函数是一个在WindowsAPI中非常重要的函数,在这里的作用是用来向Windows发送移动窗体的消息。WM_SYSCOMMAND是向Windows发送消息的常量。SC_MOVE是控制移动窗体的常量。请注意:这里SC_MOVE的赋值一定要是&HF012,它表示鼠标对象。

3.在窗体的MouseDown过程中加入以下代码:
ReleaseCapture
SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
其中ReleaseCapture函数用来释放鼠标捕获,SendMessage函数向Windows发送移动窗体的消息。
4.保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。

以上是我下的内空的原文,但我按照它所说的做了,就是达不到目的。

另外,我想问一下,如何新建一个项目,如何新添加一个模块?

回复列表 (共4个回复)

沙发

我的用法与你的稍有不同:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 1 Then '如果是鼠标左键按住窗体移动
  ReleaseCapture
  SendMessage hWnd, &HA1, 2, 0&
End If
End Sub

新添加一个模块的办法:在工程资源管理器中点击鼠标右键-添加-添加模块-新建
新建一个项目的办法:点击开始菜单,找到VB6的菜单项点击之

板凳

谢谢楼上的代码,按照你的代码,我已实现了想要的效果。
但请问:我的代码问题出在哪儿呀,是不是没有做判读,默认为鼠标一直是释放状态呢
        为什么一定要建个模块呢,没有模块就不行吗
        新建一个项目也可以理解为新做一个工程或程序吧,相当于打开一个VB新窗口?

3 楼

类模块内不能声明Public的API,改为Private就可以l

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
Private Const HTCAPTION As Long = 2
Private Const WM_NCLBUTTONDOWN As Long = &HA1

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_NCLBUTTONDOWN, HTCAPTION, ByVal 0 '模拟标题栏点击
    End If
End Sub

4 楼

多年项目开发经验,专业做毕业设计等中小型项目开发,熟悉各种数据库操作(sql server ,access ,mysql等),熟练应用VC, Delphi, VB, ASP, C#等开发语言.若有需要请联系QQ: 383147818 加我请注明: pfan项目

我来回复

您尚未登录,请登录后再回复。点此登录或注册