标 题: 鼠标在菜单上移动时显示菜单提示
' 1. 建立工程, 窗体名: Form1 ==> Label控件, 名称: lblStatus ' ==> 建立菜单若干 ' 2. 加入一个模块 '窗体中代码: Private Sub Form_Load() origWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf AppWndProc) End Sub Private Sub Form_Resize() lblstatus.Move 0, ScaleHeight - lblstatus.Height, ScaleWidth End Sub Private Sub Form_Unload(Cancel As Integer) SetWindowLong hwnd, GWL_WNDPROC, origWndProc End Sub '模块中代码: Option Explicit 'NOTE: This code MUST go in a standard module. Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hSubMenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End Type Public 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 Public Declare Sub CopyMemory Lib "kernel32" Alias _ "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _ ByVal cbCopy As Long) Public Declare Function GetMenuItemInfo Lib "user32" Alias _ "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _ ByVal b As Boolean, lpMenuItemInfo As _ MENUITEMINFO) As Long Public Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As _ Long, ByVal dwNewLong As Long) As Long Public Const GWL_WNDPROC = (-4) Public Const WM_MENUSELECT = &H11F Public Const MF_SYSMENU = &H2000& Public Const MIIM_TYPE = &H10 Public Const MIIM_DATA = &H20 Public origWndProc As Long Public Function AppWndProc(ByVal hwnd As Long, ByVal Msg _ As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim iHi As Integer, iLo As Integer Select Case Msg Case WM_MENUSELECT form1.lblstatus.Caption = "" CopyMemory iLo, wParam, 2 CopyMemory iHi, ByVal VarPtr(wParam) + 2, 2 If (iHi And MF_SYSMENU) = 0 Then Dim m As MENUITEMINFO, aCap As String m.dwTypeData = Space$(64) m.cbSize = Len(m) m.cch = 64 m.fMask = MIIM_DATA Or MIIM_TYPE If GetMenuItemInfo(lParam, CLng(iLo), False, m) Then aCap = m.dwTypeData & Chr$(0) aCap = Left$(aCap, _ InStr(aCap, Chr$(0)) - 1) form1.lblstatus.Caption = CStr(aCap) 'Select Case aCap 'Case "&Open": _ 'form1.lblstatus.Caption = _ '"Open a file" 'Case "&Save": _ 'form1.lblstatus.Caption = _ '"Save a file" 'End Select End If End If End Select AppWndProc = CallWindowProc(origWndProc, hwnd, Msg, wParam, lParam) End Function
|