--- np2/wince/np2.cpp 2003/11/24 11:46:54 1.1 +++ np2/wince/np2.cpp 2004/04/05 09:45:07 1.15 @@ -29,23 +29,37 @@ #include "fddfile.h" #include "font.h" #include "timing.h" -#include "statsave.h" +#include "keystat.h" #include "vramhdl.h" #include "menubase.h" #include "sysmenu.h" +#include "softkbd.h" static const TCHAR szAppCaption[] = STRLITERAL("Neko Project II"); static const TCHAR szClassName[] = STRLITERAL("NP2-MainWindow"); - NP2OSCFG np2oscfg = {0, 2, 0, 0}; + NP2OSCFG np2oscfg = {0, 0, 0, 0, +#if !defined(GX_DLL) + CW_USEDEFAULT, CW_USEDEFAULT, +#endif +#if defined(WIN32_PLATFORM_PSPC) + 0, 0, +#endif + 0}; HWND hWndMain; HINSTANCE hInst; HINSTANCE hPrev; char modulefile[MAX_PATH]; + GXKeyList gx_keylist; + +enum { + SYSRUNNING_MAIN = 1, + SYSRUNNING_FORE = 2 +}; -static BOOL sysrunning; +static UINT sysrunning; static UINT framecnt; static UINT waitcnt; static UINT framemax = 1; @@ -93,11 +107,11 @@ static int flagload(const char *ext, con getstatfilename(path, ext, sizeof(path)); id = DID_YES; ret = statsave_check(path, buf, sizeof(buf)); - if (ret & (~NP2FLAG_DISKCHG)) { + if (ret & (~STATFLAG_DISKCHG)) { menumbox("Couldn't restart", title, MBOX_OK | MBOX_ICONSTOP); id = DID_NO; } - else if ((!force) && (ret & NP2FLAG_DISKCHG)) { + else if ((!force) && (ret & STATFLAG_DISKCHG)) { SPRINTF(buf2, "Conflict!\n\n%s\nContinue?", buf); id = menumbox(buf2, title, MBOX_YESNOCAN | MBOX_ICONQUESTION); } @@ -135,6 +149,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT EndPaint(hWnd, &ps); break; +#if defined(WIN32_PLATFORM_PSPC) + case WM_ERASEBKGND: + if (sysrunning) { + scrndraw_redraw(); + } + break; +#endif + case WM_KEYDOWN: if (wParam == VK_F11) { if (menuvram == NULL) { @@ -165,9 +187,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case WM_MOUSEMOVE: if (scrnmng_mousepos(&lParam) == SUCCESS) { - if (menuvram == NULL) { - } - else { + if (menuvram) { menubase_moving(LOWORD(lParam), HIWORD(lParam), 0); } } @@ -175,25 +195,55 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT case WM_LBUTTONDOWN: if (scrnmng_mousepos(&lParam) == SUCCESS) { - if (menuvram == NULL) { + if (menuvram) { + menubase_moving(LOWORD(lParam), HIWORD(lParam), 1); } else { - menubase_moving(LOWORD(lParam), HIWORD(lParam), 1); +#if defined(SUPPORT_SOFTKBD) + softkbd_down(LOWORD(lParam), HIWORD(lParam) - 200); +#endif } } break; case WM_LBUTTONUP: if (scrnmng_mousepos(&lParam) == SUCCESS) { - if (menuvram == NULL) { + +#if defined(SUPPORT_SOFTKBD) + softkbd_up(); + if (menuvram) { + menubase_moving(LOWORD(lParam), HIWORD(lParam), 2); + } + else if ((LOWORD(lParam) < 32) && (HIWORD(lParam) >= 208)) { sysmenu_menuopen(0, LOWORD(lParam), HIWORD(lParam)); } - else { +#else + if (menuvram) { menubase_moving(LOWORD(lParam), HIWORD(lParam), 2); } + else { + sysmenu_menuopen(0, LOWORD(lParam), HIWORD(lParam)); + } +#endif } break; +#if !defined(GX_DLL) + case WM_MOVE: +#if !defined(_WIN32_WCE) + if (!(GetWindowLong(hWnd, GWL_STYLE) & + (WS_MAXIMIZE | WS_MINIMIZE))) +#endif + { + RECT rc; + GetWindowRect(hWnd, &rc); + np2oscfg.winx = rc.left; + np2oscfg.winy = rc.top; + sysmng_update(SYS_UPDATEOSCFG); + } + break; +#endif + #if !defined(_WIN32_WCE) case WM_ENTERSIZEMOVE: soundmng_stop(); @@ -217,13 +267,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT if (sysrunning) { if (LOWORD(wParam) != WA_INACTIVE) { GXResume(); +#if defined(GX_DLL) scrnmng_enable(TRUE); +#endif scrndraw_redraw(); soundmng_enable(SNDPROC_MAIN); + sysrunning |= SYSRUNNING_FORE; } else { + sysrunning &= ~SYSRUNNING_FORE; soundmng_disable(SNDPROC_MAIN); +#if defined(GX_DLL) scrnmng_enable(FALSE); +#endif GXSuspend(); } } @@ -250,9 +306,11 @@ static void processwait(UINT cnt) { timing_setcount(0); framereset(cnt); } +#if !defined(_WIN32_WCE) else { Sleep(1); } +#endif } @@ -318,7 +376,7 @@ int WINAPI WinMain(HINSTANCE hInstance, TRACEINIT(); inputmng_init(); - keystat_reset(); + keystat_initialize(); // if (!hPreInst) { np2.style = CS_HREDRAW | CS_VREDRAW; @@ -336,16 +394,17 @@ int WINAPI WinMain(HINSTANCE hInstance, } // } -#if !defined(WIN32_PLATFORM_PSPC) +#if !defined(GX_DLL) hWnd = CreateWindow(szClassName, szAppCaption, WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, - 0, 0, FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT, + np2oscfg.winx, np2oscfg.winy, + FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT, NULL, NULL, hInstance, NULL); #else hWnd = CreateWindow(szClassName, szAppCaption, WS_VISIBLE, - 0, 0, + 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInstance, NULL); @@ -376,6 +435,11 @@ int WINAPI WinMain(HINSTANCE hInstance, DestroyWindow(hWnd); goto np2main_err3; } + gx_keylist = GXGetDefaultKeys(GX_NORMALKEYS); + scrnmng_keybinds(); +#if defined(WIN32_PLATFORM_PSPC) + winkbd_bindinit(); +#endif soundmng_initialize(); commng_initialize(); @@ -387,7 +451,12 @@ int WINAPI WinMain(HINSTANCE hInstance, pccore_reset(); scrndraw_redraw(); - sysrunning = TRUE; +#if defined(WIN32_PLATFORM_PSPC) + winkbd_bindcur(np2oscfg.bindcur); + winkbd_bindbtn(np2oscfg.bindbtn); +#endif + + sysrunning |= SYSRUNNING_MAIN | SYSRUNNING_FORE; if (np2oscfg.resume) { id = flagload(str_sav, str_resume, FALSE); @@ -413,7 +482,7 @@ int WINAPI WinMain(HINSTANCE hInstance, #endif DispatchMessage(&msg); } - else { + else if (sysrunning & SYSRUNNING_FORE) { if (np2oscfg.NOWAIT) { pccore_exec(framecnt == 0); if (np2oscfg.DRAW_SKIP) { // nowait frame skip @@ -469,6 +538,9 @@ int WINAPI WinMain(HINSTANCE hInstance, } } } + else { + Sleep(100); + } } soundmng_disable(SNDPROC_MAIN);