Автор вопроса: Vit | Web-сайт:www.home-soft.jino-net.ru
Пример кода:
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 MF_COMMAND
CopyMemory iLo, wParam, 2
CopyMemory iHi, ByVal VarPtr(wParam) + 2, 2
Dim m As MENUITEMINFO, aCap As String
m.dwTypeData = String$(64, vbNullChar)
m.cbSize = Len(m)
m.cch = 64
m.fMask = MIIM_DATA Or MIIM_TYPE Or MIIM_SUBMENU
' If GetMenuItemInfo(hMenu, CLng(iLo), False, m) Then - hMenu - Handle меню, создаваемого функцией CreatePopupMenu
If GetMenuItemInfo(lParam, CLng(iLo), False, m) Then
aCap = m.dwTypeData & vbNullChar
aCap = Left$(aCap, InStr(aCap, vbNullChar) - 1)
buf = "cbSize=" & m.cbSize & vbCrLf
buf = buf & "cch=" & m.cch & vbCrLf
buf = buf & "dwItemData=" & m.dwItemData & vbCrLf
buf = buf & "fMask=" & m.fMask & vbCrLf
buf = buf & "fState=" & m.fState & vbCrLf
buf = buf & "fType=" & m.fType & vbCrLf
buf = buf & "hbmpChecked=" & m.hbmpChecked & vbCrLf
buf = buf & "hbmpUnchecked=" & m.hbmpUnchecked & vbCrLf
buf = buf & "hSubMenu=" & m.hSubMenu & vbCrLf
buf = buf & "wID=" & m.wID & vbCrLf
buf = buf & "dwTypeData=" & m.dwTypeData
Form1.Text1.Text = buf
End If
End Select
AppWndProc = CallWindowProc(origWndProc, hWnd, Msg, wParam, lParam)
End Function
Я создаю динамически всплывающее меню через AppendMenu, вызываю через TrackPopupMenu. Меню создаётся, но, когда я нажимаю на какой-либо пункт, функция GetMenuItemInfo возвращает информацию только первого пункта (dwTypeData - надпись). Я подставлял и сам Hanle меню (hMenu) и параметр CALLBACK-функции (lParam), но результат один и тот же.