Beispiel #1
0
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
Beispiel #4
0
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;
}