调用API函数ReleaseCapture
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
解决方案 »
- 求教,如何用vb打开和关闭多个word文档
- Shell32.FolderItem是一个什么类型?
- 用VB如何设计一个手机短信收发系统,它必须和什么硬件配套使用
- 怎样用VC编写的DLL文件
- 用VB+SQL的程序做完后,在打包的时候SQL数据库要如何做呢?能不能做个*.txt 让SQL到了别的机子在去创库呢?
- 关于WIN32API函数OpenDriver的问题
- 求助!
- 如何设置dagagrid 中行的背景颜色
- 关于Shockwave Flash控件
- 实时错误 '453' 找不到DLL入口点 ExtractAssociateIconA in shell32.dll
- 哪里有学习控件的网站?
- 数据库量太多怎么办
If WindowState = 0 Then
ReleaseCapture
End IfEnd Sub
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 Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If WindowState = 0 Then
ReleaseCapture
SendMessage hwnd, &HA1, 2, 0&
End IfEnd Sub
Rem 无标题拖动参数
Public Const WM_NCHITTEST = &H84
Public Const HTCAPTION = 2
Public Const HTCLIENT = 1
Public Const GWL_WNDPROC = (-4)
Public Const WM_NCRBUTTONUP = &HA5
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const RGN_XOR = 3
Public PROROC As Long
Rem 实现无标题拖动的处理函数
Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim rv As Long
Rem 如果消息为鼠标右键弹起,则弹出菜单
If msg = WM_NCRBUTTONUP Then
Frmmain.PopupMenu Frmmenu.popmenu
End If
Rem 如果消息为鼠标消息,就交给缺省消息处理程序处理
If msg = WM_NCHITTEST Then
rv = DefWindowProc(hwnd, msg, wParam, lParam)
If rv = HTCLIENT Then
WindowProc = HTCAPTION
Else
WindowProc = rv
End If
Else Rem 将其他的消息传给默认的窗口函数进行处理
WindowProc = CallWindowProc(PROROC, hwnd, msg, wParam, lParam)
End If
End Function
新建一窗体,将BorderStyle属性设为:0-none,即无标题窗体。再上面添加一PictureBox控件,将其Picture属性设置为一刚才制作好的图像。在其代码窗口中添加以下代码:
Option Explicit
Private Sub Form_Load()
Rem 以下这条语句将消息处理程序设置为自定义的程序中
PROROC = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
Rem 设置该窗体在最前面
SetWindowPos Frmmain.hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS
Frmmenu.PictureForm_Click
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim rv As Long
Rem 退出程序时的处理工作,恢复标题栏拖动
rv = SetWindowLong(hwnd, GWL_WNDPROC, PROROC)
Unload Frmmenu
End Sub
Me.Left = Me.Left + X
Me.Top = Me.Top + Y
End Sub
呵呵,够简单吧?其实还可以做得更好的不过忘了。