Jump to content

_GUICtrlMenu_InsertSubMenuItem?


Rawox
 Share

Recommended Posts

Hi,

So I'm trying to create a contextmenu...

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Switch $iwParam
        Case $idPlay
            Run ( $Path & "\System\UT2004.exe" )
        Case Else
            Exit
    EndSwitch
EndFunc ;==>WM_COMMAND

Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hMenu

    $hMenu = _GUICtrlMenu_CreatePopup ( 9 )
    _GUICtrlMenu_InsertMenuItem ( $hMenu, 0, "Close", $idClose )
    _GUICtrlMenu_InsertMenuItem ( $hMenu, 0, "", 0 )
    _GUICtrlMenu_InsertMenuItem ( $hMenu, 0, "Join Server", $mJoin )
    _GUICtrlMenu_InsertMenuItem ( $mJoin, 0, "WOH RPGInvasion", $idWOH )
    _GUICtrlMenu_InsertMenuItem ( $hMenu, 0, "Play Unreal Tournament 2004", $idPlay )
    _GUICtrlMenu_TrackPopupMenu ( $hMenu, $iwParam )
    _GUICtrlMenu_DestroyMenu ( $hMenu )
    Return True
EndFunc ;==>WM_CONTEXTMENU

but I can't figure out how to create submenu's. The $idWOH should be under (submenu) $mJoin...

How to do this?

Thanks in advance,

Rawox

Link to comment
Share on other sites

Hi.

If i understand correctly you want to get something like this?

Try it:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 564, 282, 382, 239)
$Button1 = GUICtrlCreateButton("RIGHT MENU ", 216, 112, 129, 57, $WS_GROUP)

$hmenu=GUICtrlCreateContextMenu($Button1)

$item=GUICtrlCreateMenu("submenutext",$hmenu)

$hexit=GUICtrlCreateMenuItem("Exit",$hmenu)

$itemofotem=GUICtrlCreateMenuItem("AAAAAAA",$item)


$seconditemofsubmenu=GUICtrlCreateMenuItem("Second Submenu",$itemofotem)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd

May be like this?

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 564, 282, 382, 239)
$Button1 = GUICtrlCreateButton("RIGHT MENU ", 216, 112, 129, 57, $WS_GROUP)

$hmenu=GUICtrlCreateContextMenu($Button1)

$item=GUICtrlCreateMenu("submenutext",$hmenu)

$hexit=GUICtrlCreateMenuItem("Exit",$hmenu)

$itemofotem=GUICtrlCreateMenuItem("AAAAAAA",$item)


$seconditemofsubmenu=GUICtrlCreateMenu("Second Submenu",$item)

$itemofsubmenu2=GUICtrlCreateMenuItem("BBBBBBB",$seconditemofsubmenu)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
Edited by Fire
[size="5"] [/size]
Link to comment
Share on other sites

You do understand me, but the problem is that I need to use the _GUICtrlMenu functions because I can't show it any other way because the script consists of just this single contextmenu...

So I need this to be done using those functions

Edited by Rawox
Link to comment
Share on other sites

Hm. I`m sorry dude.Really i have no experience with _GUICTRLmenu* functions but i think you need _GUICtrlMenu_AppendMenu() function for create submenu for $mJoin.

Check it out may be you can solve it using _GUICtrlMenu_AppendMenu().

I'm sorry Really again.I have no experience with _GUICTRLmenu* functions.

Edited by Fire
[size="5"] [/size]
Link to comment
Share on other sites

I just wrote you a nice reply and then IE crashed (I tried to create two tabs at the same time). Theres a reason I use chrome at home.

Anyway. The key is to think backwards. Make the sub menu, then use it as the last parameter in AddMenuItem

SubMenu = _GUICtrlMenu_CreateMenu

MainMenu = _GUICtrlMenu_CreatePopup
_GUICtrlMenu_AddMenuItem(MainMenu, Text, Id, SubMenu)

Or look at loading menus from resources. That makes it very easy to edit menus and use them, and it's a pity AutoIt doesn't do more to support resources natively.

sample MENU
{
     MENUITEM "&Soup", 100
     MENUITEM "S&alad", 101
     POPUP "&Entree"
     {
          MENUITEM "&Fish", 200
          MENUITEM "&Chicken", 201, CHECKED
          POPUP "&Beef"
          {
               MENUITEM "&Steak", 301
               MENUITEM "&Prime Rib", 302
          }
     }
     MENUITEM "&Dessert", 103
}

Thats a lot easier to visualize, and the code will be simpler too:

$hMenu = LoadMenu(GetModuleHandle(0), "sample")

Done ;) Sorry about writing everything in pseudo code, I don't have AutoIt on this machine...

Mat

Link to comment
Share on other sites

Haha, thank you math ;) I already found another way to manage this.

I create a really tiny gui and let autoit rightclick on it while it shows and hide it right away (also the transparancy is @ 1/255) so it won't be visible.

Thanks anyway!

Rawox

Link to comment
Share on other sites

Mat, thanks to your wonderful idea I've changed it al ;) GUICtrlGetHandle was an excellent idea!

There's always a right way to do it. You've got to learn to not accept what you know is a dodgy workaround, instead you should persevere to find the proper solution. I wish there was a neat philosophical quote explaining that theory. It would definitely go in the sig.
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...