int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; HACCEL hAccelTable; vec.push_back(new Points); vec.push_back(new Lines); // vec.push_back(new Lines); MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } GetClientRect(g_hwnd,&g_clientRect); g_cliWidth = g_clientRect.right - g_clientRect.left; g_cliHeight = g_clientRect.bottom - g_clientRect.top; EnableOpenGL(); SceneInit(g_clientRect.right, g_clientRect.bottom); GetWindowRect(g_hwnd, &g_rect); g_scrWidth = g_rect.right - g_rect.left; g_scrHeight = g_rect.bottom - g_rect.top; if(g_cliWidth > 0 && g_cliHeight > 0) SceneResizeViewport(g_cliWidth, g_cliHeight); hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_XY); SceneShow(); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } DisableOpenGL(); DestroyWindow(g_hwnd); for(size_t i = 0; i != vec.size(); ++i) delete vec[i]; vec.clear(); ChangeDisplaySettings(NULL,0); return msg.wParam; }
int Game_Main(void *parms = NULL, int num_parms = 0) { DWORD dwStartTime; dwStartTime = GetTickCount(); // this is the main loop of the game, do all your processing // here // for now test if user is hitting ESC and send WM_CLOSE if (KEYDOWN(VK_ESCAPE)) SendMessage(ghWnd,WM_CLOSE,0,0); if (KEYDOWN(VK_UP)) { gfDis -= 0.01f; } if (KEYDOWN(VK_DOWN)) { gfDis += 0.01f; } SceneShow(); // 控制帧率 while(GetTickCount() - dwStartTime < TIME_IN_FRAME) { Sleep(1); } // return success or failure or your own return code here return(1); } // end Game_Main
int Game_Main(void *parms = NULL, int num_parms = 0) { DWORD dwStartTime; dwStartTime = GetTickCount(); // this is the main loop of the game, do all your processing // here // for now test if user is hitting ESC and send WM_CLOSE if (KEYDOWN(VK_ESCAPE)) SendMessage(ghWnd,WM_CLOSE,0,0); if(gbChangePos) { if (KEYDOWN(VK_UP)) { gViewPosY += 0.01; gViewPosZ = sqrt( 1.0 - gViewPosY * gViewPosY); } if (KEYDOWN(VK_DOWN)) { gViewPosY -= 0.01; gViewPosZ = sqrt( 1.0 - gViewPosY * gViewPosY); } if (KEYDOWN(VK_LEFT)) { gViewPosX += 0.01; gViewPosZ = sqrt( 1.0 - gViewPosX * gViewPosX); } if (KEYDOWN(VK_RIGHT)) { gViewPosX -= 0.01; gViewPosZ = sqrt( 1.0 - gViewPosX * gViewPosX); } } else { if (KEYDOWN(VK_UP)) { gViewDirY += 0.01; } if (KEYDOWN(VK_DOWN)) { gViewDirY -= 0.01; } if (KEYDOWN(VK_LEFT)) { gViewDirX += 0.01; } if (KEYDOWN(VK_RIGHT)) { gViewDirX -= 0.01; } } if (KEYDOWN(VK_NUMPAD8)) { gViewUpDirY += 0.01; } if (KEYDOWN(VK_NUMPAD2)) { gViewUpDirY -= 0.01; } if (KEYDOWN(VK_NUMPAD6)) { gViewUpDirX += 0.01; } if (KEYDOWN(VK_NUMPAD4)) { gViewUpDirX -= 0.01; } SceneShow(); // 控制帧率 while(GetTickCount() - dwStartTime < TIME_IN_FRAME) { Sleep(1); } // return success or failure or your own return code here return(1); } // end Game_Main
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static int isKeydown = false; int wmId, wmEvent; /* int tempX,tempY;*/ switch (message) { case WM_COMMAND: { wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (wmId) { case IDM_EXIT: DestroyWindow(hWnd); break; case IDM_PENCIL: g_mode = modePENCIL; break; case IDM_POINTS: g_mode = modePOINTS; break; case IDM_LINES: g_mode = modeLINES; break; case IDM_Polygon: g_mode = modePOLYGON; break; case IDM_CIRCLE: g_mode = modeCIRCLE; break; case IDM_COLOR: DialogBox(hInst, (LPCTSTR)IDD_COLORBOX, hWnd, (DLGPROC)colorBox); break; case IDM_SIZEBOX: DialogBox(hInst, (LPCTSTR)IDD_DEFAULTWIDTH, hWnd, (DLGPROC)sizeBox); break; case IDM_CLEAR: { vec[0]->clear(); vec[1]->clear(); for(size_t i=2; i < vec.size(); ++i) delete vec[i]; vec.erase(vec.begin() + 2, vec.end()); InvalidateRect(hWnd, NULL, false); break; } case IDM_ADDPOINT: DialogBox(hInst, (LPCTSTR)IDD_ADDPOINT, hWnd, (DLGPROC)addPointBox); break; case IDM_ADDLINE: DialogBox(hInst, (LPCTSTR)IDD_ADDLINES, hWnd, (DLGPROC)addLineBox); break; case IDM_ADDPOLYGON: DialogBox(hInst, (LPCTSTR)IDD_ADDPOLYGON, hWnd, (DLGPROC)addPolygonBox); break; case IDM_ADDCIRCLE: DialogBox(hInst, (LPCTSTR)IDD_ADDCIRCLE, hWnd, (DLGPROC)addCircleBox); break; case IDM_SAVE: save(hWnd); break; case IDM_HELP: DialogBox(hInst, (LPCTSTR)IDD_HELPBOX, hWnd, (DLGPROC)Help); break; case IDM_DELETEPOINT: vec[0]->eraseLast(); break; case IDM_DELETELINE: vec[1]->eraseLast(); break; case IDM_DELETEOTHER: if(vec.size() >2) vec.erase(vec.end() -1); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; } case WM_RBUTTONDOWN: if(!isKeydown || g_mode != modePOLYGON) break; addLastPoint(lParam); break; case WM_MOUSEMOVE: if(!isKeydown) break; switch(g_mode) { case modePENCIL: addLastPoint(lParam); break; case modePOINTS: addPoints(lParam); break; case modeLINES: modifyLastLine(lParam); break; case modePOLYGON: case modeCIRCLE: modifyLastPoint(lParam); break; } InvalidateRect(hWnd,NULL,false); break; case WM_LBUTTONDOWN: isKeydown = true; switch(g_mode) { case modePENCIL: { Point pnt(LOWORD(lParam),g_clientRect.bottom - HIWORD(lParam)); PicElem* p = new Pencil; p->add(pnt, g_defColor,g_defSize); vec.push_back(p); } break; case modePOINTS: addPoints(lParam); break; case modeLINES: addLines(lParam,lParam); break; case modePOLYGON: { Point pnt(LOWORD(lParam),g_clientRect.bottom - HIWORD(lParam)); PicElem* p = new Polygons; p->add(pnt, pnt, g_defColor,g_defSize); p->add(pnt, g_defColor,g_defSize); vec.push_back(p); } break; case modeCIRCLE: { Point pnt(LOWORD(lParam),g_clientRect.bottom - HIWORD(lParam)); PicElem* p = new Circles; p->add(pnt, g_defColor, g_defSize); vec.push_back(p); } } InvalidateRect(hWnd,NULL,false); break; case WM_LBUTTONUP: isKeydown = false; break; case WM_SIZE: { GetClientRect(g_hwnd, &g_clientRect); g_cliWidth = g_clientRect.right - g_clientRect.left; g_cliHeight = g_clientRect.bottom - g_clientRect.top; GetWindowRect(g_hwnd, &g_rect); g_scrWidth = g_rect.right - g_rect.left; g_scrHeight = g_rect.bottom - g_rect.top; if(g_cliWidth > 0 && g_cliHeight > 0) SceneResizeViewport(g_cliWidth, g_cliHeight); } break; case WM_CHAR: switch(wParam) { case '\n': case '\r': glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); break; case ' ': glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); break; } case WM_PAINT: SceneShow(); ValidateRect(hWnd,NULL); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }