Option Explicit Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_DblClick() End End SubPrivate Sub Form_Load() Me.Show SetWindowLong Me.hwnd, -16, &H160C0000 Me.Width = Me.Width + 10 End Sub要在窗体上做好菜单先。
下面的代码能把正常窗体的标题栏去掉而保持菜单,不过只有手动改变一下窗体的大小才能实现,你自己修改一下。Private Sub Form_Load() Dim sy As Long Dim newsy As Long Const GWL_STYLE = -16 Const WS_CAPTION = &HC00000 sy = GetWindowLong(Me.hwnd, GWL_STYLE) newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION) End Sub
弄好了。打开VB,新建一个,然后加入菜单。 输入: Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_Load() Dim sy As Long Dim newsy As Long Const GWL_STYLE = -16 Const WS_CAPTION = &HC00000 Const WS_BORDER = &H800000 sy = GetWindowLong(Me.hwnd, GWL_STYLE) newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION - WS_BORDER) End Sub运行就出现了无边框但有菜单的窗体了。
上面的窗体不能移动,不过,你可以用移动“无边框”窗体的方法实现。如果把窗体的BorderStyle设为1则比较好看。 加入下面语句,可以移动它。 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 WM_NCLBUTTONDOWN = &HA1 Private Const HTCAPTION = 2 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 ThenCall ReleaseCapture Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)End IfEnd Sub有个待解决的问题就是鼠标移动到菜单上时不能移动它,不知道谁有解决的办法。
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_DblClick()
End
End SubPrivate Sub Form_Load()
Me.Show
SetWindowLong Me.hwnd, -16, &H160C0000
Me.Width = Me.Width + 10
End Sub要在窗体上做好菜单先。
Dim sy As Long
Dim newsy As Long
Const GWL_STYLE = -16
Const WS_CAPTION = &HC00000
sy = GetWindowLong(Me.hwnd, GWL_STYLE)
newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION)
End Sub
输入:
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Sub Form_Load()
Dim sy As Long
Dim newsy As Long
Const GWL_STYLE = -16
Const WS_CAPTION = &HC00000
Const WS_BORDER = &H800000
sy = GetWindowLong(Me.hwnd, GWL_STYLE)
newsy = SetWindowLong(Me.hwnd, GWL_STYLE, sy - WS_CAPTION - WS_BORDER)
End 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 Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 ThenCall ReleaseCapture
Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)End IfEnd Sub有个待解决的问题就是鼠标移动到菜单上时不能移动它,不知道谁有解决的办法。
我只是提供个思路,你自己找来看看。