程序說明:
這種方法是一種高手方法,同樣是講傳遞給Windows一個鼠標的當前位置是在標題區內,但和(一).(二)不同的地方是前兩個方法是通過SendMessage函數來傳消息給Windows,而這個方法是在Windows的到消息前,通過對WM_NCHITTSET消息的欄截.來判斷當前的鼠標位置,然后作出相應的處理
程序代碼:
Module1 Option Explicit Public Const GWL_WNDPROC = (-4) Public Const WM_NCHITTEST = &H84 Public Const HTCLIENT = 1 Public Const HTCAPTION = 2 Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public prevWndProc As Long Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam) If Msg = WM_NCHITTEST And WndProc = HTCLIENT Then WndProc = HTCAPTION End If End Function |
程序首先調用CallWindowProc,這樣就可以從還回值的知當前的鼠標位置位于那一個區域,接著判斷返回值是否等于HTCLENT(工作區)內,如果是,則將返回值設置成TICAPTION(標題區),這樣就可以瞞過Windows,讓Windows以為鼠標位于標題區內
Form1 Option Explicit Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc End Sub Private Sub Form_Unload(Cancel As Integer) SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc End Sub |
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
※以上資訊由網路資料整理而成,若有遺誤概以來源為準,本站不負任何相關責任。
※如果您認為網站上資訊侵犯了您的版權,請告訴我們
按這裡,我們將即時將您的版權資料移除。