VB6.0无边框的窗口,任务栏关闭窗口失效,求解决方法。
答案:1 悬赏:20
解决时间 2021-01-05 16:28
- 提问者网友:太高姿态
- 2021-01-05 00:16
VB6.0无边框的窗口,任务栏关闭窗口失效,求解决方法。
最佳答案
- 二级知识专家网友:佘樂
- 2021-01-05 01:08
‘鼠标左键移动窗体,右键弹出标题栏菜单
Option Explicit
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 Long
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, ByVal lParam As Long) As Long
Private Const HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const WS_CAPTION = &HC00000
Private Const WS_SIZEBOX = &H40000
Private Const WS_BORDER = &H800000
Private Const WS_DLGFRAME = &H400000
Private Const GWL_STYLE = (-16)
Private m_dwOldStyle As Long
Private Type POINTapi
x As Long
y As Long
End Type
Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Any) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTapi) As Long
Private Sub Form_Load()
m_dwOldStyle = GetWindowLong(Me.hwnd, GWL_STYLE) '获取窗口原样式
Call SetWindowLong(Me.hwnd, GWL_STYLE, m_dwOldStyle And Not WS_CAPTION And Not WS_SIZEBOX) '去除标题栏和边框
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '左键移动窗口
If Button = vbLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0) '将客户区作为标题栏来处理
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) '显示右键标题栏菜单
Dim p As POINTapi, sm&
If Button = 2 Then
GetCursorPos p
sm = TrackPopupMenu(GetSystemMenu(Me.hwnd, 0), &H0& Or &H100&, p.x, p.y, 0, Me.hwnd, ByVal 0&)
End If
If sm <> 0 Then
SendMessage Me.hwnd, &H112, sm, 0&
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SetWindowLong(Me.hwnd, GWL_STYLE, m_dwOldStyle) '恢复原窗口样式
End Sub
Option Explicit
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 Long
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, ByVal lParam As Long) As Long
Private Const HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const WS_CAPTION = &HC00000
Private Const WS_SIZEBOX = &H40000
Private Const WS_BORDER = &H800000
Private Const WS_DLGFRAME = &H400000
Private Const GWL_STYLE = (-16)
Private m_dwOldStyle As Long
Private Type POINTapi
x As Long
y As Long
End Type
Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Any) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTapi) As Long
Private Sub Form_Load()
m_dwOldStyle = GetWindowLong(Me.hwnd, GWL_STYLE) '获取窗口原样式
Call SetWindowLong(Me.hwnd, GWL_STYLE, m_dwOldStyle And Not WS_CAPTION And Not WS_SIZEBOX) '去除标题栏和边框
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '左键移动窗口
If Button = vbLeftButton Then
ReleaseCapture
Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0) '将客户区作为标题栏来处理
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) '显示右键标题栏菜单
Dim p As POINTapi, sm&
If Button = 2 Then
GetCursorPos p
sm = TrackPopupMenu(GetSystemMenu(Me.hwnd, 0), &H0& Or &H100&, p.x, p.y, 0, Me.hwnd, ByVal 0&)
End If
If sm <> 0 Then
SendMessage Me.hwnd, &H112, sm, 0&
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SetWindowLong(Me.hwnd, GWL_STYLE, m_dwOldStyle) '恢复原窗口样式
End Sub
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯