The following works for me to set a submenu as a conditional-cascade menu, then set it's default id (hwndMenu is the hwnd of the top-level menu):
MENUITEM mi;
WinSendMsg( hwndMenu, MM_QUERYITEM,
MPFROM2SHORT( idSubMenu, TRUE ), &mi );
// Set the MS_CONDITIONALCASCADE bit for the submenu.
WinSetWindowBits( mi.hwndSubMenu, QWL_STYLE, MS_CONDITIONALCASCADE,
MS_CONDITIONALCASCADE );
// Set cascade menu default
WinSendMsg( mi.hwndSubMenu, MM_SETDEFAULTITEMID,
MPFROMSHORT( idDefaultItem ), NULL );
Then I do this to query the default item:
MENUITEM mi;
WinSendMsg( hwndMenu, MM_QUERYITEM, MPFROM2SHORT( idSubMenu, TRUE ),
&mi );
id = (USHORT) WinSendMsg( mi.hwndSubMenu,
MM_QUERYDEFAULTITEMID, NULL, NULL );
Credit: Rick Fishman