/* The start of 'MyWinFunc' function */ LRESULT CALLBACK MyWinFunc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { HDC hDC; PAINTSTRUCT ps; MINMAXINFO *MinMax; INT w, h; SetDbgMemHooks(); switch (Msg) { case WM_GETMINMAXINFO: MinMax = (MINMAXINFO *)lParam; MinMax->ptMaxTrackSize.y = GetSystemMetrics(SM_CYMAXTRACK) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CYBORDER) * 2; case WM_CREATE: SetTimer(hWnd, 30, 2, NULL); IK3_AnimUnit(hWnd); SendMessage(hWnd, WM_SIZE, 0, 0); case WM_SIZE: w = LOWORD(lParam); h = HIWORD(lParam); /* Animation resize */ IK3_Reasize(w, h); SendMessage(hWnd, WM_TIMER, 0, 0); return 0; case WM_MOUSEWHEEL: IK3_MouseWheel += (SHORT)HIWORD(wParam); return 0; case WM_KEYDOWN: if (LOWORD(wParam) == 'F') FlipFullScreen(hWnd); if (LOWORD(wParam) == VK_ESCAPE) SendMessage(hWnd, WM_DESTROY, 0, 0); return 0; case WM_ERASEBKGND: return 0; case WM_TIMER: IK3_AnimRender(); InvalidateRect(hWnd, NULL, FALSE); return 0; case WM_PAINT: hDC = BeginPaint(hWnd, &ps); IK3_AnimCopyFrame(hDC); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: IK3_AnimClose(); KillTimer(hWnd, 30); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, Msg, wParam, lParam); } /* End of 'MyWinFunc' function */
/* The main program function. * ARGUMENTS: * - handle of application instance: * HINSTANCE hInstance; * - dummy handle of previous application instance (not used): * HINSTANCE hPrevInstance; * - command line string: * CHAR *CmdLine; * - show window command parameter (see SW_***): * INT CmdShow; * RETURNS: * (INT) Error level for operation system (0 for success). */ INT WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, CHAR *CmdLine, INT ShowCmd ) { /* INT i; */ WNDCLASS wc; HWND hWnd; MSG msg; SetDbgMemHooks(); /* Create window class */ wc.style = CS_VREDRAW | CS_HREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_ERROR); wc.lpszMenuName = NULL; wc.hInstance = hInstance; wc.lpfnWndProc = VG4_MyWindowFunc; wc.lpszClassName = VG4_WND_CLASS_NAME; if (!RegisterClass(&wc)) { MessageBox(NULL, "Error register window class", "ERROR", MB_OK | MB_ICONERROR); return 0; } /* Create window */ hWnd = CreateWindow(VG4_WND_CLASS_NAME, "Animation System <3", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, SW_SHOWNORMAL); UpdateWindow(hWnd); /*** Add unit samples ***/ /* for (i = 0; i < 3000; i++) VG4_AnimAddUnit(VG4_UnitCreateBall()); */ VG4_AnimAddUnit(VG4_UnitCreateClock()); /* Run message loop */ while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); return 30; } /* End of 'WinMain' function */