⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.c

📁 C:Documents and SettingsAdministrator桌面VC++多媒体特效制作百例CHAR17Bezier
💻 C
字号:
#include "defs.h"

CHAR szAppName[]="picking1";  
#define WIDTH	600
#define HEIGHT	600

LONG WINAPI MainWndProc (HWND, UINT, WPARAM, LPARAM); 
BOOL bSetupPixelFormat(HDC); 
 
GLvoid resize(GLsizei, GLsizei); 
GLvoid initializeGL(GLsizei, GLsizei);  
void setTransform(void);
void MakeAxes(void);


GLvoid initializeGL(GLsizei width, GLsizei height) 
{
	int i,j,k;

	theta = 0.0;
	beta = 0.0;
	dist = 0.0;

    glClearColor(0.0, 0.0, 0.0, 0.0);
	glPointSize(10.0);

	MakeAxes();
	bezInit();
}

BOOL bSetupPixelFormat(HDC hdc) 
{ 
    PIXELFORMATDESCRIPTOR *ppfd; 
    int pixelformat; 
 
	PIXELFORMATDESCRIPTOR pfd = { 
    sizeof(PIXELFORMATDESCRIPTOR),  //  size of this pfd 
    1,                     // version number 
    PFD_DRAW_TO_WINDOW |   // support window 
    PFD_SUPPORT_OPENGL |   // support OpenGL 
    PFD_DOUBLEBUFFER,      // double buffered 
    PFD_TYPE_RGBA,         // RGBA type 
    24,                    // 24-bit color depth 
    0, 0, 0, 0, 0, 0,      // color bits ignored 
    0,                     // no alpha buffer 
    0,                     // shift bit ignored 
    0,                     // no accumulation buffer 
    0, 0, 0, 0,            // accum bits ignored 
    32,                    // 32-bit z-buffer	 
    0,                     // no stencil buffer 
    0,                     // no auxiliary buffer 
    PFD_MAIN_PLANE,        // main layer 
    0,                     // reserved 
    0, 0, 0                // layer masks ignored 
    }; 

	pfd.cColorBits = GetDeviceCaps(ghDC,BITSPIXEL);
 
	ppfd = &pfd;

    pixelformat = ChoosePixelFormat(hdc, ppfd); 
 
    if ( (pixelformat = ChoosePixelFormat(hdc, ppfd)) == 0 ) 
    { 
        MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK); 
        return FALSE; 
    } 
 
    if (SetPixelFormat(hdc, pixelformat, ppfd) == FALSE) 
    { 
        MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK); 
        return FALSE; 
    } 
 
    return TRUE; 
} 
 
/* OpenGL code */ 
 
GLvoid resize( GLsizei width, GLsizei height ) 
{ 

    glViewport( 0, 0, width, height ); 

	setTransform();
    drawScene(GL_RENDER);
}     
 

/*----------------------------------------------------------------------*/
 void  setTransform( void )
{             
    GLdouble fovy = 50.0;
    GLdouble aspect = 1.0;
    GLdouble znear = 10.0, zfar=500.0;
 

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(fovy, aspect, znear, zfar);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();  

   
}

static int cur_sel = 0;



int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    MSG        msg; 
    WNDCLASS   wndclass; 
	RECT rect;
 
    /* Register the frame class */ 
    wndclass.style         = 0; 
    wndclass.lpfnWndProc   = (WNDPROC)MainWndProc; 
    wndclass.cbClsExtra    = 0; 
    wndclass.cbWndExtra    = 0; 
    wndclass.hInstance     = hInstance; 
    wndclass.hIcon         = LoadIcon (hInstance, szAppName); 
    wndclass.hCursor       = LoadCursor (NULL,IDC_ARROW); 
    wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
    wndclass.lpszMenuName  = szAppName; 
    wndclass.lpszClassName = szAppName; 
 
    if (!RegisterClass (&wndclass) ) 
        return FALSE; 
 
	// specify exact client size
	rect.left = rect.top = 100;
	rect.right = rect.bottom = 700;

	AdjustWindowRect(&rect,WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,TRUE);

    /* Create the frame */ 
    ghWnd = CreateWindow (szAppName, 
             "picking1", 
         WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 
             rect.left, 
             rect.top, 
             rect.right - rect.left, 
             rect.bottom - rect.top, 
             NULL, 
             NULL, 
             hInstance, 
             NULL); 
 
    /* make sure window was created */ 
    if (!ghWnd) 
        return FALSE; 
 
    /* show and update main window */ 
    ShowWindow (ghWnd, nCmdShow); 
 
    UpdateWindow (ghWnd); 
 
    while(GetMessage(&msg,NULL,0,0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
} 
 
/* main window procedure */ 
LONG WINAPI MainWndProc ( 
    HWND    hWnd, 
    UINT    uMsg, 
    WPARAM  wParam, 
    LPARAM  lParam) 
{ 
    LONG    lRet = 1; 
    PAINTSTRUCT    ps; 
    RECT rect; 
	POINT pt;
	static POINT ptOld,ptNew;
	char str[80];
	static BOOL fPick=FALSE;
 
    switch (uMsg) { 
 
    case WM_CREATE: 
        ghDC = GetDC(hWnd); 
        if (!bSetupPixelFormat(ghDC)) 
            PostQuitMessage (0); 
 
        ghRC = wglCreateContext(ghDC); 
        wglMakeCurrent(ghDC, ghRC); 
        GetClientRect(hWnd, &rect); 
        initializeGL(rect.right, rect.bottom); 

		
        break; 

	case WM_SIZE: 
        GetClientRect(hWnd, &rect); 
        resize(rect.right, rect.bottom); 
		InvalidateRect(hWnd,NULL,FALSE);


        break; 

	case WM_LBUTTONDOWN:

		ptOld.x = LOWORD(lParam);
		ptOld.y = HIWORD(lParam);
		fPick = hitTest(ptOld.x,ptOld.y);

		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_MOUSEMOVE:

		ptNew.x = LOWORD(lParam);
		ptNew.y = HIWORD(lParam);
		if(wParam & MK_LBUTTON)
			if(fPick && selected >= 0)
			{
				if(ptNew.x > ptOld.x)
				  vertices[selected].v[0] += 1.0;
				else
				  vertices[selected].v[0] -= 1.0;
#ifndef MMOUSE_ENABLED
				if(ptNew.y > ptOld.y)
				  vertices[selected].v[1] += 1.0;
				else
				  vertices[selected].v[1] -= 1.0;
#endif

			}
#if MMOUSE_ENABLED
		if(wParam & MK_MBUTTON)
			if(fPick && selected >= 0)
			{
				if(ptNew.y > ptOld.y)
				  vertices[selected].v[1] -= 1.0;
				else
				  vertices[selected].v[1] += 1.0;

			}
#endif
		if(wParam & MK_RBUTTON)
			if(fPick && selected >= 0)
			{
				if(ptNew.y > ptOld.y)
				  vertices[selected].v[2] -= 1.0;
				else
				  vertices[selected].v[2] += 1.0;

			}

		ptOld.x = ptNew.x;
		ptOld.y = ptNew.y;

		InvalidateRect(hWnd,NULL,FALSE);
		break;
 
	case WM_LBUTTONUP:

		if(fPick)
			fPick = FALSE;

		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_RBUTTONDOWN:

		ptOld.x = LOWORD(lParam);
		ptOld.y = HIWORD(lParam);
		fPick = hitTest(ptOld.x,ptOld.y);

		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_RBUTTONUP:

		if(fPick)
			fPick = FALSE;

		
		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_MBUTTONDOWN:

		ptOld.x = LOWORD(lParam);
		ptOld.y = HIWORD(lParam);
		fPick = hitTest(ptOld.x,ptOld.y);

		InvalidateRect(hWnd,NULL,FALSE);
		break;

	case WM_MBUTTONUP:

		if(fPick)
			fPick = FALSE;

		
		InvalidateRect(hWnd,NULL,FALSE);
		break;

    case WM_PAINT: 
        BeginPaint(hWnd, &ps); 

		{
			char str[80];
			sprintf(str,"Vertex[%d]:(%6f,%6f,%6f)",selected,
				vertices[selected].v[0],vertices[selected].v[1],
				vertices[selected].v[2]);
			SetWindowText(ghWnd,str);
		}

		drawScene(GL_RENDER);

        EndPaint(hWnd, &ps); 
        break; 

    case WM_DESTROY: 
        if (ghRC) 
            wglDeleteContext(ghRC); 
        if (ghDC) 
            ReleaseDC(hWnd, ghDC); 
 
        PostQuitMessage (0); 
        break; 

	case WM_KEYDOWN:
		
		switch (wParam) { 
        
		case VK_ESCAPE:

			SendMessage(hWnd,WM_CLOSE,0,0);
			break;
		case VK_LEFT: 
            
			theta = (theta + 1)%360;
			InvalidateRect(hWnd,NULL,FALSE);
            break; 
			
		case VK_RIGHT: 
		
			theta = (theta - 1)%360;
		   InvalidateRect(hWnd,NULL,FALSE);
           break;

       	case VK_UP: 
          
			beta = (beta + 1)%360;
		   InvalidateRect(hWnd,NULL,FALSE);
           break; 
			
		case VK_DOWN: 
		   beta = (beta - 1)%360;
		   InvalidateRect(hWnd,NULL,FALSE);
		   break;

		case VK_INSERT: 
		   
			dist += 1.0;
		   InvalidateRect(hWnd,NULL,FALSE);
		   break;

		case VK_DELETE: 

		   dist -= 1.0;
		   InvalidateRect(hWnd,NULL,FALSE);
		   break;

		default:
			break;

        }

	
    default: 
        lRet = DefWindowProc (hWnd, uMsg, wParam, lParam); 
        break; 
    } 
 
    return lRet; 
}

void MakeAxes(void)
{
	int i;
	
	axes = glGenLists(1);
	glNewList(axes,GL_COMPILE);
 	
	glBegin(GL_LINES);
		glColor3f(1.0,0.0,0.0);
		glVertex3f(0.0,0.0,0.0);
		glVertex3f(100.0,0.0,0.0);

		glColor3f(0.0,1.0,0.0);
		glVertex3f(0.0,0.0,0.0);
		glVertex3f(0.0,100.0,0.0);

		glColor3f(0.0,0.0,1.0);
		glVertex3f(0.0,0.0,0.0);
		glVertex3f(0.0,0.0,100.0);
	glEnd();

	glColor3f(0.5,0.5,0.5);
	for(i=1;i<=10;i++)
	{
		glBegin(GL_LINES);
			glVertex3f(i*10.0,0.0,0.0);
			glVertex3f(i*10.0,100.0,0.0);
		glEnd();
	}

	glColor3f(0.5,0.5,0.5);
	for(i=1;i<=10;i++)
	{
		glBegin(GL_LINES);
			glVertex3f(0.0,i*10.0,0.0);
			glVertex3f(100.0,i*10.0,0.0);
		glEnd();
	}
	
	glEndList();
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -