Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как динамически создать меню Добавлено: 14.11.04 14:00  

Автор вопроса:  chaos
Возможно ли создать обычное меню (не popup) динамически и добавить к нему подменю звучит очень просто но на практике :(

Ответить

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

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: barsik.newmail.ru
 Профиль | | #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()
    ;Dim hMenu As Long
    ;Dim hMainMenu As Long
    ;Dim tMenuInfo As MENUITEMINFO
    
    tMenuInfo.fType = MFT_STRING
    
    hMenu = CreateMenu()
    hMainMenu = InsertMenuItem(hMenu, 0, True, tMenuInfo)
    ;DrawMenuBar (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-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 14.11.04 23:03
ясно дело что не сдаюсь, зря что-ль я в свое время с ними возился ;)

вот код:

    Dim hMain As Long
    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 hMenu As Long

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
    ;DrawMenuBar hwnd
    Refresh
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ;DestroyMenu hMenu
End Sub


В самом грубом варианте...

Ответить

Номер ответа: 10
Автор ответа:
 shareman



Вопросов: 11
Ответов: 37
 Профиль | | #10 Добавлено: 14.11.04 23:07
2Sne - это я не про тебя "перепутал" написал, это
я 2chaos
Извини, просто проскочил твой ответ :)

Ответить

Номер ответа: 11
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 15.11.04 00:36
shareman, бывает ;)

Ответить

Номер ответа: 12
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #13
Добавлено: 15.11.04 18:30
InsertMenu, AppendMenu все это старые добрые функции, InsertMenuItem - новенькая, пришла только с 98ми форточками...
Что использовать - дело вольное, кому как и в каких потребностях ;)

А то что через CreateWindowEx там ясно дело никаких SetMenu не надо, т.к. хэндл менюшки отдается еще не созданной форме...

Ответить

Страница: 1 |

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



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