Страница: 1 |
Страница: 1 |
Вопрос: Как динамически создать меню
Добавлено: 14.11.04 14:00
Автор вопроса: chaos
Возможно ли создать обычное меню (не popup) динамически и добавить к нему подменю звучит очень просто но на практике :(
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 14.11.04 14:44
почему бы и нет? Создавай меню и используй SetMenu()
Номер ответа: 2
Автор ответа:
chaos
Вопросов: 4
Ответов: 3
Профиль | | #2
Добавлено: 14.11.04 15:59
Слушай не получается с SetMenu оно типа 0 возвращает брось код если не лень
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 14.11.04 19:09
кода у меня нет, лучше давай твой обсуждать
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 14.11.04 19:42
Номер ответа: 5
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #5
Добавлено: 14.11.04 19:49
побное вроде есть в библиотеке кодов.
Номер ответа: 6
Автор ответа:
chaos
Вопросов: 4
Ответов: 3
Профиль | | #6
Добавлено: 14.11.04 22:22
Ну посмотри код не мои но в чем сдесь ошибка
Private 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
Private Declare Function CreateMenu Lib "user32" () As Long
Private Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, ByRef lpcMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
 im hMenu As Long
 im hMainMenu As Long
 im tMenuInfo As MENUITEMINFO
tMenuInfo.fType = MFT_STRING
hMenu = CreateMenu()
hMainMenu = InsertMenuItem(hMenu, 0, True, tMenuInfo)
 rawMenuBar (hMainMenu)
End Sub
здаешся
Номер ответа: 7
Автор ответа:
chaos
Вопросов: 4
Ответов: 3
Профиль | | #7
Добавлено: 14.11.04 22:35
Da v bibleoteke kodov sovsem drugoe na moi vzgljad
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 14.11.04 23:03
ясно дело что не сдаюсь, зря что-ль я в свое время с ними возился
вот код:
Dim hSub As Long
hMain = CreateMenu
Call InsertMenu(hMain, 0, 0, 1, ByVal "hello"
Call SetMenu(Me.hwnd, hMain)
MsgBox DrawMenuBar(Me.hwnd)
И у нас VB программистов есть очень мощное оружие по сбитию с толку всех АПИ по работе с меню Зовется оно NegotiateMenus
Если это тайное оружие отключить, то все будет внорме
Номер ответа: 9
Автор ответа:
shareman
Вопросов: 11
Ответов: 37
Профиль | | #9
Добавлено: 14.11.04 23:04
Слушай, ты же все перепутал - манипулятор меню с хэндлом формы и т.д.
Это должно быть примерно так:
Private Sub Form_Activate()
Dim tMenuInfo As MENUITEMINFO
With tMenuInfo
.cbSize = Len(tMenuInfo)
.fMask = MIIM_DATA Or MIIM_TYPE
.fType = MFT_STRING
.dwTypeData = "Kuku"
.cch = Len(.dwTypeData)
End With
hMenu = CreateMenu()
InsertMenuItem hMenu, 0, True, tMenuInfo
SetMenu hwnd, hMenu
 rawMenuBar hwnd
Refresh
End Sub
Private Sub Form_Unload(Cancel As Integer)
 estroyMenu hMenu
End Sub
В самом грубом варианте...
Номер ответа: 10
Автор ответа:
shareman
Вопросов: 11
Ответов: 37
Профиль | | #10
Добавлено: 14.11.04 23:07
2Sne - это я не про тебя "перепутал" написал, это
я 2chaos
Извини, просто проскочил твой ответ
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 15.11.04 00:36
shareman, бывает
Номер ответа: 12
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #12
Добавлено: 15.11.04 11:18
shareman, а почему именно Form_Activate?
Вчера извращался с WNDCLASS & CreateWindowEx, т.е. без традиционной VB-формы окошко создавал, так там создать меню получилось без SetMenu, просто менюшный хэндл как один из параметров подставляешь. Вместо InsertMenuItem там была функция AppendMenu, поэтому без структуры MENUITEMINFO всё шло..
Номер ответа: 13
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #13
Добавлено: 15.11.04 18:30
InsertMenu, AppendMenu все это старые добрые функции, InsertMenuItem - новенькая, пришла только с 98ми форточками...
Что использовать - дело вольное, кому как и в каких потребностях
А то что через CreateWindowEx там ясно дело никаких SetMenu не надо, т.к. хэндл менюшки отдается еще не созданной форме...