Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Вопрос про меню (VB6) Добавлено: 05.08.08 21:15  

Автор вопроса:  »VladikComper« | Web-сайт: vladikcomper.narod.ru | ICQ: 419668582 
Доброго всем времени суток.

Недавно изучил АПИшки для работы с меню и пытаюсь провернуть следующее:

У меня есть форма с менюшкой "mnuOpen", в которой содержаться несколько пунктов.
Мне надо программно добавить в конец меню несколько пунктов.
Но при этом еще надо, для этих новых пунктов сделать общую процедуру.

Нашел подходящую функцию AppendMenu() - но она требует дескриптор меню - а как получить дескриптор mnuFile я не знаю. =(
Да и эту функцию в целом я не до конца понимаю.

______________
HELP ME!!!
Заранее благодарен

Ответить

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

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 05.08.08 21:37
У тебя все проще, делаешь элемент меню с индексом, а потом как обычно Load mnuMyMenu(1).
А вообще, GetMenu, GetMenuItemInfo

Ответить

Номер ответа: 2
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #2
Добавлено: 05.08.08 22:25
форма:
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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-сайт: vladikcomper.narod.ru
 Профиль | | #3
Добавлено: 06.08.08 11:50
Огромное спасибо!
Все работает.

Ответить

Страница: 1 |

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



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