--- np2/win9x/np2.cpp 2003/11/01 22:23:04 1.21 +++ np2/win9x/np2.cpp 2003/11/13 15:33:06 1.28 @@ -60,6 +60,8 @@ static char szClassName[] = "NP2-MainWi HINSTANCE hInst; HINSTANCE hPrev; int mmxflag; + BYTE np2break = 0; // ver0.30 + BOOL winui_en; NP2OSCFG np2oscfg = { "Neko Project II", "NP2", @@ -71,32 +73,32 @@ static char szClassName[] = "NP2-MainWi {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 {0, 0, 0x3e, 19200, "", "", "", ""}, // ver0.34 0xffffff, 0xffbf6a, 0, 0, - 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0}; // ver0.38 + 0, 1, 0, 9801, 0, 0, 0, 0, 0, 0, 0, 0}; // ver0.38 - char fddfolder[MAX_PATH]; - char hddfolder[MAX_PATH]; - char bmpfilefolder[MAX_PATH]; - char modulefile[MAX_PATH]; - -static UINT framecnt = 0; -static UINT waitcnt = 0; -static UINT framemax = 1; - BYTE np2break = 0; // ver0.30 -static BYTE np2stopemulate = 0; -static int np2opening = 1; -static int np2quitmsg = 0; - HMENU hStat = NULL; -static BYTE scrnmode; - WINLOC wl; - WINLOCEX wlex; + char fddfolder[MAX_PATH]; + char hddfolder[MAX_PATH]; + char bmpfilefolder[MAX_PATH]; + char modulefile[MAX_PATH]; + +static UINT framecnt = 0; +static UINT waitcnt = 0; +static UINT framemax = 1; +static BYTE np2stopemulate = 0; +static int np2opening = 1; +static int np2quitmsg = 0; +static HMENU hStat = NULL; +static BYTE scrnmode; +static WINLOCEX smwlex; -static const char np2help[] = "np2.hlp"; +static const char np2help[] = "np2.chm"; static const char np2flagext[] = "S%02d"; static const char np2resumeext[] = "sav"; + static void winuienter(void) { + winui_en = TRUE; soundmng_disable(SNDPROC_MAIN); scrnmng_topwinui(); } @@ -105,6 +107,7 @@ static void winuileave(void) { scrnmng_clearwinui(); soundmng_enable(SNDPROC_MAIN); + winui_en = FALSE; } WINLOCEX np2_winlocexallwin(HWND base) { @@ -130,9 +133,11 @@ static void changescreen(BYTE newmode) { BYTE change; BYTE renewal; + WINLOCEX wlex; change = scrnmode ^ newmode; renewal = (change & SCRNMODE_FULLSCREEN); + wlex = NULL; if (newmode & SCRNMODE_FULLSCREEN) { renewal |= (change & SCRNMODE_HIGHCOLOR); } @@ -145,11 +150,11 @@ static void changescreen(BYTE newmode) { keydisp_destroy(); } else if (renewal & SCRNMODE_ROTATEMASK) { - winlocex_destroy(wlex); wlex = np2_winlocexallwin(hWndMain); + winlocex_setholdwnd(wlex, hWndMain); } soundmng_stop(); - mouse_running(MOUSE_STOP); + mousemng_disable(MOUSEPROC_WINUI); scrnmng_destroy(); if (scrnmng_create(newmode) == SUCCESS) { scrnmode = newmode; @@ -174,9 +179,8 @@ static void changescreen(BYTE newmode) { else if (renewal & SCRNMODE_ROTATEMASK) { winlocex_move(wlex); winlocex_destroy(wlex); - wlex = NULL; } - mouse_running(MOUSE_CONT); + mousemng_enable(MOUSEPROC_WINUI); soundmng_play(); } else { @@ -297,6 +301,25 @@ static int flagload(const char *ext, con // ---- proc +static void np2popup(HWND hWnd, LPARAM lp) { + + HMENU mainmenu; + HMENU hMenu; + POINT pt; + + mainmenu = (HMENU)GetWindowLong(hWnd, NP2GWL_HMENU); + if (mainmenu == NULL) { + return; + } + hMenu = CreatePopupMenu(); + menu_addmenubar(hMenu, mainmenu); + pt.x = LOWORD(lp); + pt.y = HIWORD(lp); + ClientToScreen(hWnd, &pt); + TrackPopupMenu(hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL); + DestroyMenu(hMenu); +} + LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; @@ -305,9 +328,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT BOOL b; UINT update; HWND subwin; + WINLOCEX wlex; switch (msg) { case WM_CREATE: + np2class_wmcreate(hWnd); + np2class_windowtype(hWnd, np2oscfg.wintype); sstp_construct(hWnd); #ifndef __GNUC__ WINNLSEnableIME(hWnd, FALSE); @@ -342,12 +368,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT if ((!scrnmng_isfullscreen()) && (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE)))) { - winlocex_destroy(wlex); wlex = np2_winlocexallwin(hWnd); wincentering(hWnd); winlocex_move(wlex); winlocex_destroy(wlex); - wlex = NULL; } break; @@ -388,11 +412,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case SC_MINIMIZE: - winlocex_destroy(wlex); wlex = np2_winlocexallwin(hWnd); winlocex_close(wlex); winlocex_destroy(wlex); - wlex = NULL; return(DefWindowProc(hWnd, msg, wParam, lParam)); case SC_RESTORE: @@ -663,66 +685,38 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case IDM_NOSOUND: - xmenu_setsound(0); + xmenu_setsound(0x00); update |= SYS_UPDATECFG; break; case IDM_PC9801_14: - xmenu_setsound(1); + xmenu_setsound(0x01); update |= SYS_UPDATECFG; break; case IDM_PC9801_26K: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 4) { - sw &= 6; - sw ^= 2; - } - else { - sw = 2; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + xmenu_setsound(0x02); + update |= SYS_UPDATECFG; break; case IDM_PC9801_86: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 2) { - sw &= 6; - sw ^= 4; - } - else if (!(sw & 4)) { - sw = 4; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + xmenu_setsound(0x04); + update |= SYS_UPDATECFG; break; - case IDM_PC9801_118: - xmenu_setsound(8); + case IDM_PC9801_26_86: + xmenu_setsound(0x06); update |= SYS_UPDATECFG; break; - case IDM_CHIBIOTO: - { - BYTE sw; - sw = np2cfg.SOUND_SW; - if (sw & 4) { - sw &= 0x14; - sw ^= 0x10; - } - else { - sw = 0x14; - } - xmenu_setsound(sw); - update |= SYS_UPDATECFG; - } + case IDM_PC9801_86_CB: + xmenu_setsound(0x14); + update |= SYS_UPDATECFG; + break; + + case IDM_PC9801_118: + xmenu_setsound(8); + update |= SYS_UPDATECFG; break; case IDM_SPEAKBOARD: @@ -772,7 +766,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case IDM_MOUSE: - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); update |= SYS_UPDATECFG; break; @@ -899,11 +893,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT np2break &= ~NP2BREAK_MAIN; scrnmng_update(); keystat_allrelease(); - mouse_running(MOUSE_CONT_M); + mousemng_enable(MOUSEPROC_BG); } else { np2break |= NP2BREAK_MAIN; - mouse_running(MOUSE_STOP_M); + mousemng_disable(MOUSEPROC_BG); } np2active_renewal(); break; @@ -973,32 +967,38 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case WM_ENTERSIZEMOVE: soundmng_disable(SNDPROC_MAIN); - mouse_running(MOUSE_STOP); - winlocex_destroy(wlex); - wlex = np2_winlocexallwin(hWnd); + mousemng_disable(MOUSEPROC_WINUI); + winlocex_destroy(smwlex); + smwlex = np2_winlocexallwin(hWnd); + scrnmng_entersizing(); break; case WM_MOVING: if (np2oscfg.WINSNAP) { - winlocex_moving(wlex, (RECT *)lParam); + winlocex_moving(smwlex, (RECT *)lParam); } break; + case WM_SIZING: + scrnmng_sizing((UINT)wParam, (RECT *)lParam); + break; + case WM_EXITSIZEMOVE: - winlocex_move(wlex); - winlocex_destroy(wlex); - wlex = NULL; - mouse_running(MOUSE_CONT); + scrnmng_exitsizing(); + winlocex_move(smwlex); + winlocex_destroy(smwlex); + smwlex = NULL; + mousemng_enable(MOUSEPROC_WINUI); soundmng_enable(SNDPROC_MAIN); break; case WM_KEYDOWN: if (wParam == VK_F11) { - scrnmng_enablemenubar(); + np2class_enablemenu(hWndMain, TRUE); return(DefWindowProc(hWnd, WM_SYSKEYDOWN, VK_F10, lParam)); } if ((wParam == VK_F12) && (!np2oscfg.F12COPY)) { - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); } @@ -1044,8 +1044,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case WM_LBUTTONDOWN: - if (!mouse_btn(MOUSE_LEFTDOWN)) { - if (scrnmng_isfullscreen()) { + if (!mousemng_buttonevent(MOUSEMNG_LEFTDOWN)) { + if (!scrnmng_isfullscreen()) { + if (np2oscfg.wintype == 2) { + return(SendMessage(hWnd, WM_NCLBUTTONDOWN, + HTCAPTION, 0L)); + } + } + else { POINT p; if ((GetCursorPos(&p)) && (p.y >= 466)) { np2oscfg.clk_x++; @@ -1058,21 +1064,24 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case WM_LBUTTONUP: - if (!mouse_btn(MOUSE_LEFTUP)) { + if (!mousemng_buttonevent(MOUSEMNG_LEFTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_MBUTTONDOWN: // ver0.26 - mouse_running(MOUSE_XOR); + mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); break; case WM_RBUTTONDOWN: - if (!mouse_btn(MOUSE_RIGHTDOWN)) { - if (scrnmng_isfullscreen()) { - POINT p; + if (!mousemng_buttonevent(MOUSEMNG_RIGHTDOWN)) { + if (!scrnmng_isfullscreen()) { + np2popup(hWnd, lParam); + } + else { + POINT p; if ((GetCursorPos(&p)) && (p.y >= 466) && (np2oscfg.clk_x)) { np2oscfg.clk_fnt++; @@ -1085,11 +1094,26 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT break; case WM_RBUTTONUP: - if (!mouse_btn(MOUSE_RIGHTUP)) { + if (!mousemng_buttonevent(MOUSEMNG_RIGHTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; + case WM_LBUTTONDBLCLK: + if (!scrnmng_isfullscreen()) { + np2oscfg.wintype++; + if (np2oscfg.wintype >= 3) { + np2oscfg.wintype = 0; + } + wlex = np2_winlocexallwin(hWnd); + winlocex_setholdwnd(wlex, hWnd); + np2class_windowtype(hWnd, np2oscfg.wintype); + winlocex_move(wlex); + winlocex_destroy(wlex); + sysmng_update(SYS_UPDATEOSCFG); + } + break; + case WM_CLOSE: b = FALSE; if (!np2oscfg.comfirm) { @@ -1112,6 +1136,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case WM_DESTROY: DestroyMenu(hStat); + np2class_wmdestroy(hWnd); PostQuitMessage(0); break; @@ -1174,20 +1199,25 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT } +static void framereset(UINT cnt) { + + framecnt = 0; + scrnmng_dispclock(); + keydisp_draw((BYTE)cnt); + toolwin_draw((BYTE)cnt); + viewer_allreload(FALSE); + if (np2oscfg.DISPCLK & 3) { + if (sysmng_workclockrenewal()) { + sysmng_updatecaption(3); + } + } +} + static void processwait(UINT cnt) { if (timing_getcount() >= cnt) { timing_setcount(0); - framecnt = 0; - scrnmng_dispclock(); - keydisp_draw((BYTE)cnt); - toolwin_draw((BYTE)cnt); - viewer_allreload(FALSE); - if (np2oscfg.DISPCLK & 3) { - if (sysmng_workclockrenewal()) { - sysmng_updatecaption(3); - } - } + framereset(cnt); } else { Sleep(1); @@ -1197,7 +1227,7 @@ static void processwait(UINT cnt) { int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { - WNDCLASS np2; + WNDCLASS wc; MSG msg; HMENU hMenu; HWND hwndorg; @@ -1248,17 +1278,17 @@ int WINAPI WinMain(HINSTANCE hInstance, np2class_initialize(hInstance); if (!hPreInst) { - np2.style = CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW; - np2.lpfnWndProc = WndProc; - np2.cbClsExtra = 0; - np2.cbWndExtra = 0; - np2.hInstance = hInstance; - np2.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); - np2.hCursor = LoadCursor(NULL, IDC_ARROW); - np2.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); - np2.lpszMenuName = MAKEINTRESOURCE(IDM_MAIN); - np2.lpszClassName = szClassName; - if (!RegisterClass(&np2)) { + wc.style = CS_BYTEALIGNCLIENT | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = NP2GWL_SIZE; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH); + wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAIN); + wc.lpszClassName = szClassName; + if (!RegisterClass(&wc)) { return(FALSE); } } @@ -1268,7 +1298,7 @@ int WINAPI WinMain(HINSTANCE hInstance, hWndMain = CreateWindow(szClassName, np2oscfg.titles, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | - WS_MINIMIZEBOX, + WS_THICKFRAME | WS_MINIMIZEBOX, np2oscfg.winx, np2oscfg.winy, 640, 400, NULL, NULL, hInstance, NULL); scrnmng_initialize(); @@ -1317,7 +1347,7 @@ int WINAPI WinMain(HINSTANCE hInstance, } InsertMenu(hMenu, 1, MF_BYPOSITION | MF_POPUP, (UINT)hStat, "S&tat"); } - sysmenu_init(); + sysmenu_initialize(); DrawMenuBar(hWndMain); // ver0.30 @@ -1349,14 +1379,6 @@ int WINAPI WinMain(HINSTANCE hInstance, return(FALSE); } } - if (!(scrnmode & SCRNMODE_FULLSCREEN)) { - if (np2oscfg.toolwin) { - toolwin_create(); - } - if (np2oscfg.keydisp) { - keydisp_create(); - } - } if (soundmng_initialize() == SUCCESS) { soundmng_pcmload(SOUND_PCMSEEK, "SEEKWAV", EXTROMIO_RES); @@ -1370,9 +1392,12 @@ int WINAPI WinMain(HINSTANCE hInstance, juliet_prepare(); #endif + mousemng_initialize(); if (np2oscfg.MOUSE_SW) { // ver0.30 - mouse_running(MOUSE_ON); + mousemng_enable(MOUSEPROC_SYSTEM); } +// mousemng_enable(MOUSEPROC_WINUI); +// mousemng_enable(MOUSEPROC_BG); commng_initialize(); sysmng_initialize(); @@ -1381,7 +1406,6 @@ int WINAPI WinMain(HINSTANCE hInstance, pccore_init(); S98_init(); - sstpmsg_welcome(); #ifdef OPENING_WAIT @@ -1392,6 +1416,15 @@ int WINAPI WinMain(HINSTANCE hInstance, pccore_reset(); + if (!(scrnmode & SCRNMODE_FULLSCREEN)) { + if (np2oscfg.toolwin) { + toolwin_create(); + } + if (np2oscfg.keydisp) { + keydisp_create(); + } + } + np2opening = 0; // ¤ì¤¸¤¦¤à @@ -1404,7 +1437,7 @@ int WINAPI WinMain(HINSTANCE hInstance, } else if (id == IDCANCEL) { DestroyWindow(hWndMain); - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_WINUI); S98_trash(); pccore_term(); sstp_destruct(); @@ -1441,7 +1474,7 @@ int WINAPI WinMain(HINSTANCE hInstance, else { if (np2oscfg.NOWAIT) { joy_flash(); - mouse_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); dclock_callback(); if (np2oscfg.DRAW_SKIP) { // nowait frame skip @@ -1460,7 +1493,7 @@ int WINAPI WinMain(HINSTANCE hInstance, else if (np2oscfg.DRAW_SKIP) { // frame skip if (framecnt < np2oscfg.DRAW_SKIP) { joy_flash(); - mouse_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); dclock_callback(); framecnt++; @@ -1473,7 +1506,7 @@ int WINAPI WinMain(HINSTANCE hInstance, if (!waitcnt) { UINT cnt; joy_flash(); - mouse_callback(); + mousemng_callback(); pccore_exec(framecnt == 0); dclock_callback(); framecnt++; @@ -1494,7 +1527,7 @@ int WINAPI WinMain(HINSTANCE hInstance, else { timing_setcount(cnt - framecnt); } - processwait(0); + framereset(0); } } else { @@ -1517,7 +1550,7 @@ int WINAPI WinMain(HINSTANCE hInstance, pccore_cfgupdate(); - mouse_running(MOUSE_OFF); + mousemng_disable(MOUSEPROC_WINUI); S98_trash(); if (np2oscfg.resume) {