王国荣有本书,关于VB和API函数的,上面有现成的东西。
解决方案 »
- vb+mssql查询问题
- VBA关于word的问题
- 请问那位大哥用过vb访问过ldap请指教!!!
- 请问如何将屏幕操作录制成AVI呢?
- 100分求救:如何用Installshield在一台已经安装了SQL的计算机上安装一个SQL数据库,谢谢
- 论坛上的模拟qq截图加了刷子工具,为什么画出来的是点?
- 有关msflexgrid 的问题,请教各位朋友?
- 關于VB中DATAREPORT報表打印問題
- 请问:在VB编写WINSOCKET程序时,有个“窗口”(不是FORM)大小为16,通信方式为同步,是什么意思呀?
- 问题可能不难,可我就是不会。
- 问题啊
- ◆谁有ExRainButton6.ocx这个按钮控件的注册码或注册机啊?高分相送!
WITH FORM1
.LEFT=
.TOP=
END WITH
Private sngY as SingleMouseDown:
sngX=x
sngY=yMouseMove:
If Button=VBLeftButton Then
Me.Move Me.Left+x-sngX, Me.Top+y-sngY
End If
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongConst WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ReleaseCapture
Call SendMessage(me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&)
End If
End Sub
Dim x0, y0 As Integer
Dim dragging As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
x0 = x
y0 = y
dragging = True
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If dragging Then
Me.Left = Me.Left + x - x0
Me.Top = Me.Top + y - y0
End If
End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
dragging = False
End Sub
吴斌
大家知道,在VB中可以通过设置Form的属性,制作无系统标题栏的窗口。可是,
由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借
助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。
首先,在module文件中加入下列声明语句:
Declare Sub ReleaseCapture Lib"User"()
Declare Function SendMessage Lib"User"(ByVal hWnd As Integer,ByVal
wMsg As Integer,ByVal wParam As Integer,_lParam As Any)As Long
Public Const WM_SYSCOMMAND=&H112
Public Const SC_MOVE=&HF010
Public Const HTCAPTION=2
然后,在Form的MouseDown事件中加入下列代码:
ReleaseCapture
Ret&=SendMessage(Me.hWnd,WM_SYSCOMMAND,_SC_MOVE+HTCAPTION,0)
……
程序运行后,只要当光标落在Form区域时按住鼠标左键,便可以拖动窗口了。
在一些要求生动活泼的界面的程序设计中,开发者常常希望自制风格独特的标题栏,
以满足整个界面的要求。通过这个方法,就可以使自制的标题栏达到乱真的地步。
不过,用作自制标题栏的控件,必须具有MouseDown事件以摆放上述代码。
移动没有标题栏的窗口
我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,
我们可以用下面的方法来移动窗口:
在 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 HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
然后,在 Form_MouseDown 事件中:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End Sub
我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,我们可以用下面的方法来移动窗口:
*API函数声明:
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 HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
在 Form_MouseDown 事件中:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION,0&
End Sub
Dim ty As SinglePrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
tx = X
ty = Y
End If
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Me.Move Me.Left + X - tx, Me.Top + Y - ty
End If
End Sub模块申明
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long窗体:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Dim ReturnVal As Long
X = ReleaseCapture()
ReturnVal = SendMessage(hwnd, &HA1, 2, 0)
End If
End Sub