int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow ) { MSG msg; #ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); #endif if( !initApplication(hInstance) ) return FALSE; HANDLE hMutex = CreateMutex(NULL,NULL,className); if(ERROR_ALREADY_EXISTS == GetLastError()){ if( lpCmdLine[0]!='\0'){ HWND hWin=FindWindow( className, NULL ); if( hWin ){ SendMessage( hWin, WM_COMMAND, ID_END, 0 ); } }else{ return FALSE; } } HANDLE hAccel = LoadAccelerators( hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR) ); CoInitialize(NULL); readProfile(); if( !OpenPackFile() ) return FALSE; if( !InitInstance(hInstance,nCmdShow) ) return FALSE; SystemInit(lpCmdLine); WINNLSEnableIME(sysInf.hWnd,FALSE); TIMECAPS tc; timeGetDevCaps(&tc,sizeof(tc)); timeBeginPeriod(tc.wPeriodMin); while(FALSE==sysInf.bGameEnd){ BOOL bGotMsg; if(sysInf.bIsActive || lpMovie || !sysInf.bBackStop){ bGotMsg = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE); }else{ bGotMsg = GetMessage( &msg, NULL, 0U, 0U ); } if(bGotMsg){ if(TranslateAccelerator( sysInf.hWnd, (HACCEL)hAccel, &msg ))continue; TranslateMessage(&msg); DispatchMessage(&msg); } if(sysInf.bIsActive || lpMovie || !sysInf.bBackStop){ mainLoop(); } } WINNLSEnableIME(sysInf.hWnd,TRUE); timeEndPeriod(tc.wPeriodMin); writeProfile(); cleanup(); CoUninitialize(); CloseHandle(hMutex); return msg.wParam; } // WinMain
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow ) { MSG msg; if( !initApplication(hInstance) ) return FALSE; HANDLE hMutex = CreateMutex(NULL,NULL,className); if(ERROR_ALREADY_EXISTS == GetLastError())return FALSE; HANDLE hAccel = LoadAccelerators( hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR) ); CoInitialize(NULL); readProfile(); if( !OpenPackFile() ) return FALSE; if( !InitInstance(hInstance,nCmdShow) ) return FALSE; SystemInit(); WINNLSEnableIME(sysInf.hWnd,FALSE); TIMECAPS tc; timeGetDevCaps(&tc,sizeof(tc)); timeBeginPeriod(tc.wPeriodMin); while(FALSE==sysInf.bGameEnd){ BOOL bGotMsg; if(sysInf.bIsActive || lpMovie || lpStaffRoll){ bGotMsg = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE); }else{ bGotMsg = GetMessage( &msg, NULL, 0U, 0U ); } if(bGotMsg){ if(TranslateAccelerator( sysInf.hWnd, (HACCEL)hAccel, &msg ))continue; TranslateMessage(&msg); DispatchMessage(&msg); } if(sysInf.bIsActive || sysInf.execMode==movie_mode || lpStaffRoll){ mainLoop(); } } WINNLSEnableIME(sysInf.hWnd,TRUE); timeEndPeriod(tc.wPeriodMin); writeProfile(); cleanup(); CoUninitialize(); CloseHandle(hMutex); if(CheckWinExec()){ WinExec2( str_winpath, str_winexec ); } return msg.wParam; } // WinMain
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; RECT rc; HDC hdc; UINT update; switch (msg) { case WM_CREATE: #ifndef __GNUC__ WINNLSEnableIME(hWnd, FALSE); #endif break; case WM_SYSCOMMAND: update = 0; switch(wParam) { case IDM_MEMORYDUMP: debugsub_memorydump(); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } sysmng_update(update); break; case WM_COMMAND: np2cmd(hWnd, LOWORD(wParam)); break; case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE) { scrnmng_update(); keystat_allrelease(); mousemng_enable(MOUSEPROC_BG); } else { mousemng_disable(MOUSEPROC_BG); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); if (np2opening) { HINSTANCE hinst; RECT rect; int width; int height; HBITMAP hbmp; BITMAP bmp; HDC hmdc; HBRUSH hbrush; #if defined(_WIN64) hinst = reinterpret_cast<HINSTANCE>(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE)); #else hinst = reinterpret_cast<HINSTANCE>(::GetWindowLong(hWnd, GWL_HINSTANCE)); #endif GetClientRect(hWnd, &rect); width = rect.right - rect.left; height = rect.bottom - rect.top; hbmp = LoadBitmap(hinst, _T("NP2BMP")); GetObject(hbmp, sizeof(BITMAP), &bmp); hbrush = (HBRUSH)SelectObject(hdc, GetStockObject(BLACK_BRUSH)); PatBlt(hdc, 0, 0, width, height, PATCOPY); SelectObject(hdc, hbrush); hmdc = CreateCompatibleDC(hdc); SelectObject(hmdc, hbmp); BitBlt(hdc, (width - bmp.bmWidth) / 2, (height - bmp.bmHeight) / 2, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, SRCCOPY); DeleteDC(hmdc); DeleteObject(hbmp); } else { // scrnmng_update(); scrndraw_redraw(); } EndPaint(hWnd, &ps); break; case WM_QUERYNEWPALETTE: scrnmng_querypalette(); break; case WM_MOVE: if ((!scrnmng_isfullscreen()) && (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE)))) { GetWindowRect(hWnd, &rc); np2oscfg.winx = rc.left; np2oscfg.winy = rc.top; sysmng_update(SYS_UPDATEOSCFG); } break; case WM_SIZE: if (wParam == SIZE_RESTORED) { scrnmng_restoresize(); } break; case WM_ENTERMENULOOP: winuienter(); if (scrnmng_isfullscreen()) { DrawMenuBar(hWnd); } break; case WM_EXITMENULOOP: winuileave(); break; case WM_ENTERSIZEMOVE: soundmng_disable(SNDPROC_MAIN); mousemng_disable(MOUSEPROC_WINUI); break; case WM_EXITSIZEMOVE: mousemng_enable(MOUSEPROC_WINUI); soundmng_enable(SNDPROC_MAIN); break; case WM_KEYDOWN: if (wParam == VK_F11) { return(DefWindowProc(hWnd, WM_SYSKEYDOWN, VK_F10, lParam)); } if ((wParam == VK_F12) && (!np2oscfg.F12COPY)) { mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); } else { winkbd_keydown(wParam, lParam); } break; case WM_KEYUP: if (wParam == VK_F11) { return(DefWindowProc(hWnd, WM_SYSKEYUP, VK_F10, lParam)); } if ((wParam != VK_F12) || (np2oscfg.F12COPY)) { winkbd_keyup(wParam, lParam); } break; case WM_SYSKEYDOWN: winkbd_keydown(wParam, lParam); break; case WM_SYSKEYUP: winkbd_keyup(wParam, lParam); break; case WM_LBUTTONDOWN: if (!mousemng_buttonevent(MOUSEMNG_LEFTDOWN)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_LBUTTONUP: if (!mousemng_buttonevent(MOUSEMNG_LEFTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_MBUTTONDOWN: // ver0.26 mousemng_toggle(MOUSEPROC_SYSTEM); xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1); sysmng_update(SYS_UPDATECFG); break; case WM_RBUTTONDOWN: if (!mousemng_buttonevent(MOUSEMNG_RIGHTDOWN)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_RBUTTONUP: if (!mousemng_buttonevent(MOUSEMNG_RIGHTUP)) { return(DefWindowProc(hWnd, msg, wParam, lParam)); } break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; case WM_NP2CMD: switch(LOWORD(lParam)) { case NP2CMD_EXIT: np2quitmsg = 1; PostQuitMessage(0); break; case NP2CMD_EXIT2: np2quitmsg = 2; PostQuitMessage(0); break; case NP2CMD_RESET: pccore_cfgupdate(); pccore_reset(); break; } break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return(0L); }