Страница: 1 |
Страница: 1 |
Вопрос: Вопрос про меню (VB6)
Добавлено: 05.08.08 21:15
Автор вопроса: »VladikComper« | Web-сайт:
Доброго всем времени суток.
Недавно изучил АПИшки для работы с меню и пытаюсь провернуть следующее:
У меня есть форма с менюшкой "mnuOpen", в которой содержаться несколько пунктов.
Мне надо программно добавить в конец меню несколько пунктов.
Но при этом еще надо, для этих новых пунктов сделать общую процедуру.
Нашел подходящую функцию AppendMenu() - но она требует дескриптор меню - а как получить дескриптор mnuFile я не знаю. =(
Да и эту функцию в целом я не до конца понимаю.
______________
HELP ME!!!
Заранее благодарен
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 05.08.08 21:37
У тебя все проще, делаешь элемент меню с индексом, а потом как обычно Load mnuMyMenu(1).
А вообще, GetMenu, GetMenuItemInfo
Номер ответа: 2
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #2
Добавлено: 05.08.08 22:25
форма:
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Const MF_STRING = &H0&
Private Sub Form_Load()
hMenu = GetMenu(Me.hwnd)
hsubMenu = GetSubMenu(hMenu, 0)
AppendMenu hsubMenu, MF_STRING, ByVal 1000, "3"
AppendMenu hsubMenu, MF_STRING, ByVal 1001, "4"
SetWindowProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
KillWindowProc
End Sub
модуль:
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 Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Dim PrevProc As Long
Public Sub SetWindowProc()
PrevProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub KillWindowProc()
SetWindowLong Form1.hwnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_COMMAND Then
Select Case wParam
Case 1000
MsgBox "3"
Case 1001
MsgBox "4"
End Select
End If
End Function
Номер ответа: 3
Автор ответа:
»VladikComper«
ICQ: 419668582
Вопросов: 23
Ответов: 147
Web-сайт:
Профиль | | #3
Добавлено: 06.08.08 11:50
Огромное спасибо!
Все работает.