Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Popup Menu Добавлено: 22.03.05 10:01  

Автор вопроса:  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), но результат один и тот же.

В чём ошибка?

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Vit



Вопросов: 68
Ответов: 62
 Web-сайт: www.home-soft.jino-net.ru
 Профиль | | #1
Добавлено: 22.03.05 11:18
Добавлю, что:

Private Const MF_CHECKED = &H8&
Private Const MF_SEPARATOR = &H800&
Private Const MF_STRING = &H0&
Private Const MF_CALLBACKS = &H8000000
'hMenu - объявлено Public в модуле (тип Long)
Private Sub Form_Load()
    hMenu = CreatePopupMenu()
    AppendMenu hMenu, MF_STRING Or MF_CALLBACKS, ByVal 0&, "Hello !"
    AppendMenu hMenu, MF_STRING Or MF_CALLBACKS, ByVal 0&, "Testing ..."
    AppendMenu hMenu, MF_SEPARATOR, ByVal 0&, ByVal 0&
    AppendMenu hMenu, MF_CHECKED Or MF_CALLBACKS, ByVal 0&, "TrackPopupMenu"
    SetHook Me.hWnd, True 'простая функция, для регистрирования и разрегистрирования обработки CALLBACK-функции (True - регистрация, False - разрегистрация)
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #2 Добавлено: 22.03.05 12:48
Во-первых, поставь маску fMask пошире. Текущая возвращает только dwItemData, fType и hSubMenu.
Во-вторых, lParam равен нулю в этом случае всегда.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам