VB中实现无标题窗体拖动

现在的许多Windows下的应用程序,都采用了图形化的界面,例如:WINAMP等!这样做的好处是可以使程序界面更漂亮生动,更具吸引力。但是在这样的界面下就不能使用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.保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。就和其它著名的应用程序一样。

以上讲述了如何在VB中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。

例如以下代码可以实现图片框的拖动:

ReleaseCapture

SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0

其实,运用API函数可以实现许多你意想不到的功能。