--- np2/win9x/menu.cpp 2007/07/20 15:02:29 1.26 +++ np2/win9x/menu.cpp 2007/11/11 07:11:26 1.29 @@ -10,114 +10,191 @@ #define MFCHECK(a) ((a)?MF_CHECKED:MF_UNCHECKED) -typedef struct { - UINT16 id; - UINT16 str; -} MENUITEMS; +static BOOL searchchildmenu(HMENU hMenu, UINT uID, + HMENU *phmenuRet, UINT *puPos) +{ + UINT nCount; + UINT i; + MENUITEMINFO mii; + nCount = GetMenuItemCount(hMenu); + for (i=0; iid) { - insertresmenu(menu, pos, MF_BYPOSITION | MF_STRING, - item->id, item->str); - } - else { - InsertMenu(menu, pos, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); - } - item++; - pos++; + if (LoadString(g_hInstance, uID, szString, NELEMENTS(szString))) + { + InsertMenu(hMenu, uPosition, uFlags, uIDNewItem, szString); } } +void menu_addmenubar(HMENU popup, HMENU menubar) +{ + (void)addmenu(popup, 0, menubar, FALSE); +} + // ---- -static const MENUITEMS smenuitem[] = { - {IDM_TOOLWIN, IDS_TOOLWIN}, +void sysmenu_initialize(void) +{ + HMENU hMenu; + UINT uPos; + + hMenu = GetSystemMenu(g_hWndMain, FALSE); + uPos = 0; + #if defined(SUPPORT_KEYDISP) - {IDM_KEYDISP, IDS_KEYDISP}, + uPos += addmenures(hMenu, uPos, IDR_SYSKEYDISP, FALSE); #endif #if defined(SUPPORT_SOFTKBD) - {IDM_SOFTKBD, IDS_SOFTKBD}, + uPos += addmenures(hMenu, uPos, IDR_SYSSOFTKBD, FALSE); #endif - {0, 0}, - {IDM_SCREENCENTER, IDS_SCREENCENTER}, - {IDM_SNAPENABLE, IDS_SNAPENABLE}, - {IDM_BACKGROUND, IDS_BACKGROUND}, - {IDM_BGSOUND, IDS_BGSOUND}, - {0, 0}, - {IDM_SCRNMUL4, IDS_SCRNMUL4}, - {IDM_SCRNMUL6, IDS_SCRNMUL6}, - {IDM_SCRNMUL8, IDS_SCRNMUL8}, - {IDM_SCRNMUL10, IDS_SCRNMUL10}, - {IDM_SCRNMUL12, IDS_SCRNMUL12}, - {IDM_SCRNMUL16, IDS_SCRNMUL16}, - {0, 0}}; -static const MENUITEMS smenuitem2[] = { + uPos += addmenures(hMenu, uPos, IDR_SYS, FALSE); + if (np2oscfg.I286SAVE) + { #if defined(CPUCORE_IA32) && defined(SUPPORT_MEMDBG32) - {IDM_MEMDBG32, IDS_MEMDBG32}, + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG32, FALSE); #endif - {IDM_MEMORYDUMP, IDS_MEMORYDUMP}, - {IDM_DEBUGUTY, IDS_DEBUGUTY}, - {0, 0}}; - - -void sysmenu_initialize(void) { - - HMENU hMenu; - - hMenu = GetSystemMenu(hWndMain, FALSE); - insertresmenus(hMenu, 0, smenuitem, NELEMENTS(smenuitem)); - if (np2oscfg.I286SAVE) { - insertresmenus(hMenu, 0, smenuitem2, NELEMENTS(smenuitem2)); + uPos += addmenures(hMenu, uPos, IDR_SYSDEBUG, FALSE); } } @@ -125,7 +202,7 @@ void sysmenu_settoolwin(UINT8 value) { value &= 1; np2oscfg.toolwin = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_TOOLWIN, MFCHECK(value)); } @@ -133,7 +210,7 @@ void sysmenu_setkeydisp(UINT8 value) { value &= 1; np2oscfg.keydisp = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_KEYDISP, MFCHECK(value)); } @@ -141,7 +218,7 @@ void sysmenu_setwinsnap(UINT8 value) { value &= 1; np2oscfg.WINSNAP = value; - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_SNAPENABLE, MFCHECK(value)); } @@ -151,7 +228,7 @@ void sysmenu_setbackground(UINT8 value) np2oscfg.background &= 2; np2oscfg.background |= (value & 1); - hmenu = GetSystemMenu(hWndMain, FALSE); + hmenu = GetSystemMenu(g_hWndMain, FALSE); if (value & 1) { CheckMenuItem(hmenu, IDM_BACKGROUND, MF_UNCHECKED); EnableMenuItem(hmenu, IDM_BGSOUND, MF_GRAYED); @@ -166,7 +243,7 @@ void sysmenu_setbgsound(UINT8 value) { np2oscfg.background &= 1; np2oscfg.background |= (value & 2); - CheckMenuItem(GetSystemMenu(hWndMain, FALSE), + CheckMenuItem(GetSystemMenu(g_hWndMain, FALSE), IDM_BGSOUND, MFCHECK((value & 2) ^ 2)); } @@ -175,7 +252,7 @@ void sysmenu_setscrnmul(UINT8 value) { HMENU hmenu; // np2cfg.scrnmul = value; - hmenu = GetSystemMenu(hWndMain, FALSE); + hmenu = GetSystemMenu(g_hWndMain, FALSE); CheckMenuItem(hmenu, IDM_SCRNMUL4, MFCHECK(value == 4)); CheckMenuItem(hmenu, IDM_SCRNMUL6, MFCHECK(value == 6)); CheckMenuItem(hmenu, IDM_SCRNMUL8, MFCHECK(value == 8)); @@ -187,165 +264,67 @@ void sysmenu_setscrnmul(UINT8 value) { // ---- -typedef struct { - UINT16 title; - UINT16 items; - MENUITEMS item[1]; -} SUBMITEMS; - -typedef struct { - UINT16 title; - UINT16 items; - MENUITEMS item[3]; -} SUBMITEM3; - -static const SUBMITEM3 fddmenu[4] = { - {IDS_FDD1, 3, - {{IDM_FDD1OPEN, IDS_OPEN}, {0, 0}, {IDM_FDD1EJECT, IDS_EJECT}}}, - {IDS_FDD2, 3, - {{IDM_FDD2OPEN, IDS_OPEN}, {0, 0}, {IDM_FDD2EJECT, IDS_EJECT}}}, - {IDS_FDD3, 3, - {{IDM_FDD3OPEN, IDS_OPEN}, {0, 0}, {IDM_FDD3EJECT, IDS_EJECT}}}, - {IDS_FDD4, 3, - {{IDM_FDD4OPEN, IDS_OPEN}, {0, 0}, {IDM_FDD4EJECT, IDS_EJECT}}}}; - -#if defined(SUPPORT_IDEIO) -static const SUBMITEM3 side[3] = { - {IDS_IDE0, 3, - {{IDM_IDE0OPEN, IDS_OPEN}, {0, 0}, {IDM_IDE0EJECT, IDS_REMOVE}}}, - {IDS_IDE1, 3, - {{IDM_IDE1OPEN, IDS_OPEN}, {0, 0}, {IDM_IDE1EJECT, IDS_REMOVE}}}, - {IDS_IDE2, 3, - {{IDM_IDE2OPEN, IDS_OPEN}, {0, 0}, {IDM_IDE2EJECT, IDS_EJECT}}}}; -#else -static const SUBMITEM3 ssasi[2] = { - {IDS_SASI1, 3, - {{IDM_IDE0OPEN, IDS_OPEN}, {0, 0}, {IDM_IDE0EJECT, IDS_REMOVE}}}, - {IDS_SASI2, 3, - {{IDM_IDE1OPEN, IDS_OPEN}, {0, 0}, {IDM_IDE1EJECT, IDS_REMOVE}}}}; -#endif - -#if defined(SUPPORT_SCSI) -static const SUBMITEM3 sscsi[4] = { - {IDS_SCSI0, 3, - {{IDM_SCSI0OPEN, IDS_OPEN}, {0, 0}, {IDM_SCSI0EJECT, IDS_REMOVE}}}, - {IDS_SCSI1, 3, - {{IDM_SCSI1OPEN, IDS_OPEN}, {0, 0}, {IDM_SCSI1EJECT, IDS_REMOVE}}}, - {IDS_SCSI2, 3, - {{IDM_SCSI2OPEN, IDS_OPEN}, {0, 0}, {IDM_SCSI2EJECT, IDS_REMOVE}}}, - {IDS_SCSI3, 3, - {{IDM_SCSI3OPEN, IDS_OPEN}, {0, 0}, {IDM_SCSI3EJECT, IDS_REMOVE}}}}; -#endif - - -static void insdiskmenu(HMENU hMenu, UINT pos, const void *item) { - - HMENU hSubMenu; -const SUBMITEMS *smi; - - hSubMenu = CreatePopupMenu(); - smi = (SUBMITEMS *)item; - insertresmenus(hSubMenu, 0, smi->item, smi->items); - insertresmenu(hMenu, pos, MF_BYPOSITION | MF_POPUP, - (UINT)hSubMenu, smi->title); -} +void xmenu_initialize(void) +{ + HMENU hMenu; + UINT uPos; + HMENU hmenuSub; + UINT i; + UINT uSubPos; + hMenu = np2class_gethmenu(g_hWndMain); + uPos = 1; #if defined(SUPPORT_STATSAVE) -static const TCHAR xmenu_stat[] = _T("S&tat"); -static const TCHAR xmenu_statsave[] = _T("Save %u"); -static const TCHAR xmenu_statload[] = _T("Load %u"); - -static void addstatsavemenu(HMENU hMenu, UINT pos) { - - HMENU hSubMenu; - UINT i; - TCHAR buf[16]; - - hSubMenu = CreatePopupMenu(); - for (i=0; i0;) { - i--; - if (np2cfg.fddequip & (1 << i)) { - insdiskmenu(hMenu, 1, fddmenu + i); - } - } +#if defined(SUPPORT_WAVEREC) + (void)addmenubyid(hMenu, IDM_S98LOGGING, IDR_WAVEREC); +#endif -#if defined(SUPPORT_STATSAVE) - if (np2oscfg.statsave) { - addstatsavemenu(hMenu, 1); + if (np2oscfg.I286SAVE) + { + (void)addmenubyid(hMenu, IDM_SSTP, IDR_CPUSAVE); } -#endif } void xmenu_disablewindow(void) { HMENU hmenu; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); EnableMenuItem(hmenu, IDM_WINDOW, MF_GRAYED); EnableMenuItem(hmenu, IDM_FULLSCREEN, MF_GRAYED); } @@ -354,7 +333,7 @@ void xmenu_setroltate(UINT8 value) { HMENU hmenu; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_ROLNORMAL, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_ROLLEFT, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_ROLRIGHT, MFCHECK(value == 2)); @@ -364,21 +343,21 @@ void xmenu_setdispmode(UINT8 value) { value &= 1; np2cfg.DISPSYNC = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_DISPSYNC, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_DISPSYNC, MFCHECK(value)); } void xmenu_setraster(UINT8 value) { value &= 1; np2cfg.RASTER = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_RASTER, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_RASTER, MFCHECK(value)); } void xmenu_setwaitflg(UINT8 value) { value &= 1; np2oscfg.NOWAIT = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_NOWAIT, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_NOWAIT, MFCHECK(value)); } void xmenu_setframe(UINT8 value) { @@ -386,7 +365,7 @@ void xmenu_setframe(UINT8 value) { HMENU hmenu; np2oscfg.DRAW_SKIP = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_AUTOFPS, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_60FPS, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_30FPS, MFCHECK(value == 2)); @@ -402,7 +381,7 @@ void xmenu_setkey(UINT8 value) { value = 0; } np2cfg.KEY_MODE = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_KEY, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_JOY1, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_JOY2, MFCHECK(value == 2)); @@ -413,7 +392,7 @@ void xmenu_setxshift(UINT8 value) { HMENU hmenu; np2cfg.XSHIFT = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_XSHIFT, MFCHECK(value & 1)); CheckMenuItem(hmenu, IDM_XCTRL, MFCHECK(value & 2)); CheckMenuItem(hmenu, IDM_XGRPH, MFCHECK(value & 4)); @@ -427,7 +406,7 @@ void xmenu_setf12copy(UINT8 value) { value = 0; } np2oscfg.F12COPY = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_F12MOUSE, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_F12COPY, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_F12STOP, MFCHECK(value == 2)); @@ -443,7 +422,7 @@ void xmenu_setbeepvol(UINT8 value) { value &= 3; np2cfg.BEEP_VOL = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_BEEPOFF, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_BEEPLOW, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_BEEPMID, MFCHECK(value == 2)); @@ -456,7 +435,7 @@ void xmenu_setsound(UINT8 value) { sysmng_update(SYS_UPDATESBOARD); np2cfg.SOUND_SW = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_NOSOUND, MFCHECK(value == 0x00)); CheckMenuItem(hmenu, IDM_PC9801_14, MFCHECK(value == 0x01)); CheckMenuItem(hmenu, IDM_PC9801_26K, MFCHECK(value == 0x02)); @@ -477,14 +456,14 @@ void xmenu_setjastsound(UINT8 value) { value &= 1; np2oscfg.jastsnd = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_JASTSOUND, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_JASTSOUND, MFCHECK(value)); } void xmenu_setmotorflg(UINT8 value) { value &= 1; np2cfg.MOTOR = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_SEEKSND, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_SEEKSND, MFCHECK(value)); } void xmenu_setextmem(UINT8 value) { @@ -493,7 +472,7 @@ void xmenu_setextmem(UINT8 value) { sysmng_update(SYS_UPDATEMEMORY); np2cfg.EXTMEM = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_MEM640, MFCHECK(value == 0)); CheckMenuItem(hmenu, IDM_MEM16, MFCHECK(value == 1)); CheckMenuItem(hmenu, IDM_MEM36, MFCHECK(value == 3)); @@ -506,13 +485,13 @@ void xmenu_setmouse(UINT8 value) { value &= 1; np2oscfg.MOUSE_SW = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_MOUSE, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_MOUSE, MFCHECK(value)); } #if defined(SUPPORT_S98) void xmenu_sets98logging(UINT8 value) { - CheckMenuItem(np2class_gethmenu(hWndMain), + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_S98LOGGING, MFCHECK(value)); } #endif @@ -520,7 +499,7 @@ void xmenu_sets98logging(UINT8 value) { #if defined(SUPPORT_WAVEREC) void xmenu_setwaverec(UINT8 value) { - CheckMenuItem(np2class_gethmenu(hWndMain), + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_WAVEREC, MFCHECK(value)); } #endif @@ -530,7 +509,7 @@ void xmenu_setshortcut(UINT8 value) { HMENU hmenu; np2oscfg.shortcut = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_ALTENTER, MFCHECK(value & 1)); CheckMenuItem(hmenu, IDM_ALTF4, MFCHECK(value & 2)); } @@ -541,7 +520,7 @@ void xmenu_setdispclk(UINT8 value) { value &= 3; np2oscfg.DISPCLK = value; - hmenu = np2class_gethmenu(hWndMain); + hmenu = np2class_gethmenu(g_hWndMain); CheckMenuItem(hmenu, IDM_DISPCLOCK, MFCHECK(value & 1)); CheckMenuItem(hmenu, IDM_DISPFRAME, MFCHECK(value & 2)); sysmng_workclockrenewal(); @@ -552,27 +531,27 @@ void xmenu_setbtnmode(UINT8 value) { value &= 1; np2cfg.BTN_MODE = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_JOYX, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_JOYX, MFCHECK(value)); } void xmenu_setbtnrapid(UINT8 value) { value &= 1; np2cfg.BTN_RAPID = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_RAPID, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_RAPID, MFCHECK(value)); } void xmenu_setmsrapid(UINT8 value) { value &= 1; np2cfg.MOUSERAPID = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_MSRAPID, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_MSRAPID, MFCHECK(value)); } void xmenu_setsstp(UINT8 value) { value &= 1; np2oscfg.sstp = value; - CheckMenuItem(np2class_gethmenu(hWndMain), IDM_SSTP, MFCHECK(value)); + CheckMenuItem(np2class_gethmenu(g_hWndMain), IDM_SSTP, MFCHECK(value)); }