--- np2/win9x/menu.cpp 2007/10/26 14:38:34 1.27 +++ np2/win9x/menu.cpp 2007/12/28 20:36:39 1.31 @@ -7,79 +7,10 @@ #include "pccore.h" - -#define MFCHECK(a) ((a)?MF_CHECKED:MF_UNCHECKED) - -typedef struct { - UINT16 id; - UINT16 str; -} MENUITEMS; - - -// これってAPIあるのか? -void menu_addmenubar(HMENU popup, HMENU menubar) { - - UINT cnt; - UINT pos; - UINT i; - MENUITEMINFO mii; - TCHAR str[128]; - HMENU hSubMenu; - - cnt = GetMenuItemCount(menubar); - pos = 0; - 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++; - } -} - -static BOOL searchchildmenu(HMENU hMenu, UINT uID, HMENU *phmenuRet, UINT *puPos) +BOOL menu_searchmenu(HMENU hMenu, UINT uID, HMENU *phmenuRet, int *pnPos) { - UINT nCount; - UINT i; + int nCount; + int i; MENUITEMINFO mii; nCount = GetMenuItemCount(hMenu); @@ -96,13 +27,14 @@ static BOOL searchchildmenu(HMENU hMenu, { *phmenuRet = hMenu; } - if (puPos) + if (pnPos) { - *puPos = i; + *pnPos = i; } return TRUE; } - else if ((mii.hSubMenu) && (searchchildmenu(mii.hSubMenu, uID, phmenuRet, puPos))) + else if ((mii.hSubMenu) && + (menu_searchmenu(mii.hSubMenu, uID, phmenuRet, pnPos))) { return TRUE; } @@ -111,10 +43,12 @@ static BOOL searchchildmenu(HMENU hMenu, return FALSE; } -static BOOL searchsubmenu(HMENU hMenu, HMENU hmenuTarget, HMENU *phmenuRet, UINT *puPos) +#if 0 +static BOOL searchsubmenu(HMENU hMenu, HMENU hmenuTarget, + HMENU *phmenuRet, int *pnPos) { - UINT nCount; - UINT i; + int nCount; + int i; MENUITEMINFO mii; nCount = GetMenuItemCount(hMenu); @@ -131,13 +65,13 @@ static BOOL searchsubmenu(HMENU hMenu, H { *phmenuRet = hMenu; } - if (puPos) + if (pnPos) { - *puPos = i; + *pnPos = i; } return TRUE; } - if (searchsubmenu(mii.hSubMenu, hmenuTarget, phmenuRet, puPos)) + if (searchsubmenu(mii.hSubMenu, hmenuTarget, phmenuRet, pnPos)) { return TRUE; } @@ -145,49 +79,127 @@ static BOOL searchsubmenu(HMENU hMenu, H } return FALSE; } +#endif // 0 + +// これってAPIあるのか? +int menu_addmenu(HMENU hMenu, int nPos, HMENU hmenuAdd, BOOL bSeparator) +{ + int nCount; + int nAdded; + int i; + MENUITEMINFO mii; + TCHAR szString[128]; + HMENU hmenuSub; + + if (nPos < 0) + { + nPos = GetMenuItemCount(hMenu); + } + nCount = GetMenuItemCount(hmenuAdd); + nAdded = 0; + for (i=0; iitem, smi->items); - insertresmenu(hMenu, pos, MF_BYPOSITION | MF_POPUP, - (UINT)hSubMenu, smi->title); -} +void xmenu_initialize(void) +{ + HMENU hMenu; + int nPos; + HMENU hmenuSub; + UINT i; + int nSubPos; + hMenu = np2class_gethmenu(g_hWndMain); + nPos = 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)menu_addmenubyid(hMenu, IDM_S98LOGGING, IDR_WAVEREC); +#endif -#if defined(SUPPORT_STATSAVE) - if (np2oscfg.statsave) { - addstatsavemenu(hMenu, 1); + if (np2oscfg.I286SAVE) + { +#if defined(SUPPORT_PC9821) + (void)menu_addmenubyid(hMenu, IDM_SSTP, IDR_CPUSAVE32); +#else // defined(SUPPORT_PC9821) + (void)menu_addmenubyid(hMenu, IDM_SSTP, IDR_CPUSAVE16); +#endif // defined(SUPPORT_PC9821) } -#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); } @@ -424,7 +342,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)); @@ -434,21 +352,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) { @@ -456,7 +374,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)); @@ -472,7 +390,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)); @@ -483,7 +401,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)); @@ -497,7 +415,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)); @@ -513,7 +431,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)); @@ -526,7 +444,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)); @@ -547,14 +465,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) { @@ -563,7 +481,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)); @@ -576,13 +494,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 @@ -590,7 +508,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 @@ -600,7 +518,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)); } @@ -611,7 +529,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(); @@ -622,27 +540,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)); }