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

📄 ddex1.cpp

📁 人工智能遗传算法,经过改进,希望对大家有帮助,常常联系啊.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*==========================================================================
 *
 *  Copyright (C) 1995-1996 Microsoft Corporation. All Rights Reserved.
 *
 *  File:       ddex1.cpp
 *  Content:    Direct Draw example program 1.  Creates a Direct Draw 
 *              object and then a primary surface with a back buffer.
 *              Slowly flips between the primary surface and the back
 *              buffer.  Press F12 to terminate the program.
 *
 ***************************************************************************/

#define NAME "DDExample1"
#define TITLE "Direct Draw Example 1"

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <stdio.h>
#include "resource.h"
#include "gui16.h"

#define TIMER_ID        1
#define TIMER_RATE      30

LPDIRECTDRAWSURFACE     lpDDSPrimary;   // DirectDraw primary surface
LPDIRECTDRAWSURFACE     lpDDSBack;      // DirectDraw back surface
LPDIRECTDRAWSURFACE     lpDDSZBuffer;
LPDIRECTDRAWSURFACE     lpDDSEndBmp;
char*					txt[80];
int						lines;
BOOL                    bActive;        // is application active?
BOOL                    bQuit = false;
BOOL                    bClear = true;
int 					phase = 0;
HANDLE					thandle;
HWND                hwnd;

CPointList p1(2000);
CPointList p2(2000);
CFaceList face(4000);
CONVERT_MATRIX3D m1,m2,m4;
POINT3D pot,pot1;

CPointList p3(200);
CPointList p4(200);
CFaceList face1(400);
CTextureList tex(10);
CONVERT_MATRIX3D m5,m6,m7,m8;
POINT3D pot2,pot3;

DWORD WINAPI demo(LPVOID lpparm);
void lineDemo1(DDSURFACEDESC* ddsd);
void lineDemo2(DDSURFACEDESC* ddsd);
void circleDemo1(DDSURFACEDESC* ddsd);
void circleDemo2(DDSURFACEDESC* ddsd);
void ellipseDemo1(DDSURFACEDESC* ddsd);
void ellipseDemo2(DDSURFACEDESC* ddsd);
void rectDemo1(DDSURFACEDESC* ddsd);
void rectDemo2(DDSURFACEDESC* ddsd);
void polygonDemo1(DDSURFACEDESC* ddsd);
void polygonDemo2(DDSURFACEDESC* ddsd);
void fsDemo1(DDSURFACEDESC* ddsd);
BOOL demo3dInit();
BOOL demo2dInit();
void clearUp();

time_t tt;
long frames,rate,k;
POINT3D potLight;

/*
 * finiObjects
 *
 * finished with all objects we use; release them
 */

static void finiObjects( void )
{
    if( lpDD != NULL )
    {
        if( lpDDSPrimary != NULL )
        {
            lpDDSPrimary->Release();
            lpDDSPrimary = NULL;
        }
		if( lpDDSZBuffer != NULL )
        {
            lpDDSZBuffer->Release();
            lpDDSZBuffer = NULL;
        }
		if( lpDDSEndBmp != NULL )
        {
            lpDDSEndBmp->Release();
            lpDDSEndBmp = NULL;
        }
		lpDD->Release();
        lpDD = NULL;
    }
	clearUp();
} /* finiObjects */

char szMsg[] = "计算机图形学算法演示 (F12 退出)";
char szMsg1[] = "按↓键前进,按↑键后退";
char szFrontMsg[][40] = {	"普通直线",
							"反走样直线",
							"画圆",
							"圆填充",
							"画椭圆",
							"椭圆填充",
							"画矩形",
							"矩形填充",
							"画多边形",
							"多边形填充",
							"分形图",
							"三维图形",
							"纹理贴图",
							"The End"
						};	
char szBackMsg[] = "计算机图形学算发演示 (F12 退出)";

long FAR PASCAL WindowProc( HWND hWnd, UINT message, 
                            WPARAM wParam, LPARAM lParam )
{
   // PAINTSTRUCT ps;
  //  RECT        rc;
   // SIZE        size;

    switch( message )
    {
    case WM_ACTIVATEAPP:
        bActive = wParam;
        break;

    case WM_CREATE:
        break;

    case WM_SETCURSOR:
        SetCursor(NULL);
        return TRUE;
    case WM_KEYDOWN:
        switch( wParam )
        {
        case VK_ESCAPE:
        case VK_F12:
			bQuit = true;
			while(WaitForSingleObject(thandle,200) != WAIT_OBJECT_0)
				;
            PostMessage(hWnd, WM_CLOSE, 0, 0);
            break;
		case VK_DOWN:
			bClear = true;
			if(phase < 13)
				phase++;
			if(phase == 10)
				bClear = false;
			break;
		case  VK_UP:
			bClear = true;
			if(phase > 0)
				phase--;
			if(phase == 10|| phase==13)
				bClear = false;
			break;
        }
        break;

    case WM_PAINT:
        break;

    case WM_DESTROY:
        finiObjects();
        PostQuitMessage( 0 );
        break;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);

} /* WindowProc */

/*
 * doInit - do work required for every instance of the application:
 *                create the window, initialize data
 */
static BOOL doInit( HINSTANCE hInstance, int nCmdShow )
{	    
    WNDCLASS            wc;
    DDSURFACEDESC       ddsd;
    DDSCAPS             ddscaps;
    HRESULT             ddrval;
    HDC                 hdc;
    char                buf[256];

    /*
     * set up and register window class
     */
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
    wc.hCursor = LoadCursor( NULL, IDC_ARROW );
    wc.hbrBackground = NULL;
    wc.lpszMenuName = NAME;
    wc.lpszClassName = NAME;
    RegisterClass( &wc );
    
    /*
     * create a window
     */
    hwnd = CreateWindowEx(
        WS_EX_TOPMOST,
        NAME,
        TITLE,
        WS_POPUP,
        0, 0,
        GetSystemMetrics( SM_CXSCREEN ),
        GetSystemMetrics( SM_CYSCREEN ),
        NULL,
        NULL,
        hInstance,
        NULL );

    if( !hwnd )
    {
        return FALSE;
    }

    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );
//	MessageBox( hwnd, "Hello!", "", MB_OK); 

    /*
     * create the main DirectDraw object
     */
    ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
    if( ddrval == DD_OK )
    {
        // Get exclusive mode
        ddrval = lpDD->SetCooperativeLevel( hwnd,
                                DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
        if(ddrval == DD_OK )
        {
            ddrval = lpDD->SetDisplayMode( 640,480, 16 );
            if( ddrval == DD_OK )
            {
                // Create the primary surface with 1 back buffer
                ddsd.dwSize = sizeof( ddsd );
				ddsd.dwFlags = DDSD_CAPS | 
							   DDSD_BACKBUFFERCOUNT;
                ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
                                      DDSCAPS_FLIP | 
                                      DDSCAPS_COMPLEX;
                ddsd.dwBackBufferCount = 1;
                ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
                if( ddrval == DD_OK )
                {
                    // Get a pointer to the back buffer
                    ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
                    ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, 
                                                          &lpDDSBack);
                    if( ddrval == DD_OK )
                    {
						LOGBRUSH brush;
						RECT rc;
						brush.lbStyle=BS_SOLID ;
						brush.lbColor=(COLORREF)0x00000000;
						HBRUSH hbrush=CreateBrushIndirect(&brush);
						GetClientRect(hwnd, &rc);
                        // draw some text.
                        if (lpDDSPrimary->GetDC(&hdc) == DD_OK)
                        {
							FillRect(hdc,&rc,hbrush);
                            lpDDSPrimary->ReleaseDC(hdc);
                        }

                        if (lpDDSBack->GetDC(&hdc) == DD_OK)
                        {
							FillRect(hdc,&rc,hbrush);
                            lpDDSBack->ReleaseDC(hdc);
                        }
						DeleteObject(hbrush);
						//Create Z buffer.
						ddsd.dwFlags = DDSD_CAPS | 
									   DDSD_WIDTH|
									   DDSD_HEIGHT|
									   DDSD_ZBUFFERBITDEPTH ;
						ddsd.ddsCaps.dwCaps = DDSCAPS_ZBUFFER|DDSCAPS_SYSTEMMEMORY ;
						ddsd.dwWidth = 640;
						ddsd.dwHeight = 480;
						ddsd.dwZBufferBitDepth = 16;
						ddrval = lpDD->CreateSurface( &ddsd, &lpDDSZBuffer, NULL );
						if(ddrval == DD_OK)
						{	lpDDSBack->AddAttachedSurface(lpDDSZBuffer);
							if (demo2dInit())
								if(demo3dInit())
								{	frames=0;
									time(&tt);
									DWORD tID;
									if((thandle = CreateThread(NULL,0,demo,NULL,0,&tID)) != NULL)
										return TRUE;
								}
						}
                    }
                }
            }
        }
    }

    wsprintf(buf, "Direct Draw Init Failed (%08lx)\n", ddrval );
    MessageBox( hwnd, buf, "ERROR", MB_OK );
    finiObjects();
    DestroyWindow( hwnd );
    return FALSE;
} /* doInit */

void clearUp()
{	for(int i=0;i<lines;i++)
		delete[] txt[i];
}

#define MAX_LINE_LENTH 80
#define MAX_LINES 80
BOOL demo2dInit()
{	if(loadBitmap(&lpDDSEndBmp,"end.bmp") == FALSE)
		return FALSE;
	char buf[MAX_LINE_LENTH];
	ifstream ifs("end.txt");
	if(!ifs)
		return FALSE;
	lines = MAX_LINES;
	for(int i=0;i<MAX_LINES;i++)
	{	ifs.getline( buf,MAX_LINE_LENTH-1);
		if((txt[i] = new char[strlen(buf)+1]) == NULL)
		{	lines = i;
			return FALSE;
		}
		strcpy(txt[i],buf);
		if(ifs.eof())
		{	lines = i+1;
			break;
		}
	}
	return TRUE;
}

BOOL demo3dInit()
{	POINT3D potp;
	TRIANGLE3D trgl;
	potp.x = 0, potp.y = 0, potp.z = 0;
	p3.addPoint(&potp);
	potp.x = 500, potp.y = 0, potp.z = 0;
	p3.addPoint(&potp);
	potp.x = 500, potp.y = 500, potp.z = 0;
	p3.addPoint(&potp);
	potp.x = 0, potp.y = 500, potp.z = 0;
	p3.addPoint(&potp);
	potp.x = 0, potp.y = 0, potp.z = 500;
	p3.addPoint(&potp);
	potp.x = 500, potp.y = 0, potp.z = 500;
	p3.addPoint(&potp);
	potp.x = 500, potp.y = 500, potp.z = 500;
	p3.addPoint(&potp);
	potp.x = 0, potp.y = 500, potp.z = 500;
	p3.addPoint(&potp);
	potp.x = 200, potp.y = 200, potp.z = 200;
	p3.addPoint(&potp);
	potp.x = 300, potp.y = 200, potp.z = 200;
	p3.addPoint(&potp);
	potp.x = 300, potp.y = 300, potp.z = 200;
	p3.addPoint(&potp);
	potp.x = 200, potp.y = 300, potp.z = 200;
	p3.addPoint(&potp);
	potp.x = 200, potp.y = 200, potp.z = 300;
	p3.addPoint(&potp);
	potp.x = 300, potp.y = 200, potp.z = 300;
	p3.addPoint(&potp);
	potp.x = 300, potp.y = 300, potp.z = 300;
	p3.addPoint(&potp);
	potp.x = 200, potp.y = 300, potp.z = 300;
	p3.addPoint(&potp);
/*	trgl.p1=3 , trgl.p2=2 , trgl.p3=1 ;
	face1.addTriangle(&trgl);
	trgl.p1=3 , trgl.p2=1 , trgl.p3=0 ;
	face1.addTriangle(&trgl);
	trgl.p1=3 , trgl.p2=0 , trgl.p3=4 ;
	face1.addTriangle(&trgl);
	trgl.p1=3 , trgl.p2=4 , trgl.p3=7 ;
	face1.addTriangle(&trgl);
	trgl.p1=0 , trgl.p2=1 , trgl.p3=4 ;
	face1.addTriangle(&trgl);
	trgl.p1=4 , trgl.p2=1 , trgl.p3=5 ;
	face1.addTriangle(&trgl);
	trgl.p1=3 , trgl.p2=7 , trgl.p3=6 ;
	face1.addTriangle(&trgl);
	trgl.p1=3 , trgl.p2=6 , trgl.p3=2 ;
	face1.addTriangle(&trgl);
	trgl.p1=7 , trgl.p2=4 , trgl.p3=5 ;
	face1.addTriangle(&trgl);
	trgl.p1=6 , trgl.p2=7 , trgl.p3=5 ;
	face1.addTriangle(&trgl);
	trgl.p1=6 , trgl.p2=5 , trgl.p3=2 ;
	face1.addTriangle(&trgl);

⌨️ 快捷键说明

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