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

📄 me_dx.cpp

📁 战棋游戏的地图编辑器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if(CurWnd)
		{
			dispME = TRUE;
			switch( wParam )
			{
			case 0x3:
				PreButton = ButtonPressed;
				ButtonPressed = 7;
				CurWnd = PreWnd;
				se.Copy();
				ButtonPressed = PreButton;
				break;

			case 0x16:
				PreButton = ButtonPressed;
				ButtonPressed = 8;
				CurWnd = PreWnd;
				se.Paste();
				ButtonPressed = PreButton;
				break;

			case 0x4:
				PreButton = ButtonPressed;
				ButtonPressed = 9;
				CurWnd = PreWnd;
				se.Delete();
				ButtonPressed = PreButton;
				break;

			case 0x18:
				PreButton = ButtonPressed;
				ButtonPressed = 10;
				CurWnd = PreWnd;
				se.Cut();
				ButtonPressed = PreButton;
				break;

			case 0x1:
				PreButton = ButtonPressed;
				ButtonPressed = 11;
				CurWnd = PreWnd;
				se.Select();
				ButtonPressed = PreButton;
				break;

			case 0x1a:
				PreButton = ButtonPressed;
				ButtonPressed = 12;
				CurWnd = PreWnd;
				se.UnChange();
				ButtonPressed = PreButton;
				break;

			case 'G':
			case 'g':
				CurWnd = PreWnd;
				if( bGrid ) bGrid = FALSE;
				else bGrid = TRUE;
				break;

			case 'F':
			case 'f':
				CurWnd = PreWnd;
				PreButton = ButtonPressed = 1;
				se.SelectME(Earth, 0, 1);
				break;

			case 'S':
			case 's':
				CurWnd = PreWnd;
				PreButton = ButtonPressed = 2;
				se.SelectME(Structure, 0, 1);
				break;

			case 'T':
			case 't':
				CurWnd = PreWnd;
				PreButton = ButtonPressed = 3;
				se.SelectME(Tree, 0, 1);
				break;

			case 'R':
			case 'r':
				PreButton = ButtonPressed = 4;
				CurWnd = PreWnd;
				se.SelectME(River, 0, 1);
				break;

			case 'E':
			case 'e':
				PreButton = ButtonPressed = 5;
				CurWnd = PreWnd;
				se.SelectME(Object, 0, 1);
				break;

			case 'A':
			case 'a':
				PreButton = ButtonPressed = 6;
				CurWnd = PreWnd;
				se.SelectME(Army, 0, 1);
				break;

			case '1':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,1);
				break;

			case '2':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,2);
				break;

			case '3':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,3);
				break;

			case '4':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,4);
				break;

			case '5':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,5);
				break;

			case '6':
				CurWnd = PreWnd;
				se.SelectME(CurClass,CurPage,6);
				break;
			}
		}
		break;

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

    case WM_KEYDOWN:
		if(CurWnd)
		{
			switch(wParam)
			{
			case VK_ESCAPE:
				PreButton = ButtonPressed;
				ButtonPressed = 16;
				CurWnd = NULL;
				dispME = FALSE;
				se.Quit();
				break;

			case VK_F1:
				PreButton = ButtonPressed;
				ButtonPressed = 17;
				CurWnd = NULL;
				dispME = FALSE;
				CurPage = 0;
				se.Help();
				break;

			case VK_F2:
				PreButton = ButtonPressed;
				ButtonPressed = 13;
				CurWnd = NULL;
				dispME = FALSE;
				CurPage = 0;
				se.NewMap();
				break;

			case VK_F3:
				PreButton = ButtonPressed;
				ButtonPressed = 14;
				CurWnd = NULL;
				dispME = FALSE;
				CurPage = 0;
				se.LoadMap();
				break;

			case VK_F4:
				PreButton = ButtonPressed;
				ButtonPressed = 15;
				CurWnd = NULL;
				dispME = FALSE;
				se.SaveMap();
				break;

			case VK_UP:
				if(se.scrY > 1) se.scrY -= 2;
				se.curX = md.rx + se.scrX;
				se.curY = md.ry + se.scrY;
				wsprintf(codebuf, "(%03d, %03d)", se.curX, se.curY);
				display(codebuf, &sRcw[3]);
				break;

			case VK_DOWN:
				if(se.scrY < 100 - 35) se.scrY += 2;
				se.curX = md.rx + se.scrX;
				se.curY = md.ry + se.scrY;
				wsprintf(codebuf, "(%03d, %03d)", se.curX, se.curY);
				display(codebuf, &sRcw[3]);
				break;

			case VK_LEFT:
				if(se.scrX > 0) se.scrX -= 1;
				se.curX = md.rx + se.scrX;
				se.curY = md.ry + se.scrY;
				wsprintf(codebuf, "(%03d, %03d)", se.curX, se.curY);
				display(codebuf, &sRcw[3]);
				break;

			case VK_RIGHT:
				if(se.scrX < 100 - 10) se.scrX += 1;
				se.curX = md.rx + se.scrX;
				se.curY = md.ry + se.scrY;
				wsprintf(codebuf, "(%03d, %03d)", se.curX, se.curY);
				display(codebuf, &sRcw[3]);
				break;
			}
		}
		break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);

} /* WindowProc */

/*
 * This function is called if the initialization function fails
 */
static BOOL initFail( HWND hwnd ,char *msg)
{
    finiObjects();
    MessageBox( hwnd, msg, TITLE, MB_OK );

    DestroyWindow( hwnd );
    return FALSE;
} /* initFail */

/*
 * doInit - do work required for every instance of the application:
 *                create the window, initialize data
 */
static HWND doInit( HINSTANCE hInstance, int nCmdShow )
{
    HWND                hwnd;
    WNDCLASS            wc;
    DDSURFACEDESC       ddsd;
    DDSCAPS             ddscaps;
    HRESULT             ddrval;


    CurClass = 0;
	CurPage = 0;
	dispME = TRUE;
	for(int i = 0; i < 6; i++)
		for(int j = 0; j < 12; j++)
		{
			me[i][j].index =0;
			me[i][j].height = 0;
			me[i][j].hotx = 0;
			me[i][j].hoty = 0;
			me[i][j].pdata = NULL;
		}


	me[Earth][0].index = 0x100;
	me[Earth][1].index = 0x101;
	me[Tree ][0].index = 0x300;

	me[Earth][0].height = 1;
	me[Earth][1].height = 1;
	me[Tree ][0].height = 6;

	me[Earth][0].hotx = 30;
	me[Earth][1].hotx = 30;
	me[Tree ][0].hotx = 35;

	me[Earth][0].hoty = 32;
	me[Earth][1].hoty = 64;
	me[Tree ][0].hoty = 102;

	me[Earth][0].pdata = &sRcm[3];
	me[Earth][1].pdata = &sRcm[6];
	me[Tree ][0].pdata = &sRcm[7];


	/*
     * 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 = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = NAME;
    RegisterClass( &wc );
    
    /*
     * create a window
     */
    hwnd = CreateWindowEx(
	0,
	NAME,
	TITLE,
	WS_POPUP,
	0,
	0,
	GetSystemMetrics(SM_CXSCREEN),
	GetSystemMetrics(SM_CYSCREEN),
	NULL,
	NULL,
	hInstance,
	NULL );

	CurWnd = PreWnd = hwnd;
    if( !hwnd )	return hwnd;

    ShowWindow( hwnd, nCmdShow );
    UpdateWindow( hwnd );

    /*
     * create the main DirectDraw object
     */
    ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: can't create.");
		return NULL;
	}

    // Get exclusive mode
    ddrval = lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN );
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: Can't set cooperative level.");
		return NULL;
	}

    // Set the video mode to 800x600x8
    ddrval = lpDD->SetDisplayMode( 800, 600, 8);
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: Can't set to this mode.");
		return NULL;
	}

    // 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 )
	{
		initFail(hwnd, "DirectDraw: Can't crate surface.");
		return NULL;
	}

    ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
    ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: BackBuffer no found.");
		return NULL;
	}

    // Create a offscreen bitmap.
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwHeight = 680;
    ddsd.dwWidth = 800;
    ddrval = lpDD->CreateSurface( &ddsd, &lpDDSOne, NULL );
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: Can't locate bitmap buffer 1");
		return NULL;
	}
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
	ddsd.dwWidth = 800;
	ddsd.dwHeight = 640;
    ddrval = lpDD->CreateSurface( &ddsd, &lpDDSTwo, NULL );
    if( ddrval != DD_OK )
	{
		initFail(hwnd, "DirectDraw: Can't locate bitmap buffer 2");
		return NULL;
	}

    // Create a Direct Draw Palette and associate it with the front buffer
    lpDDPal = DDLoadPalette(lpDD, szBitmap);

    if (lpDDPal)
	lpDDSPrimary->SetPalette( lpDDPal );

    if(!InitSurfaces() )
	{
		initFail(hwnd,"DIrectDraw: Can't set Palette.");
		return NULL;
	}

    // Create a timer to recycle the palette.
    if( !SetTimer( hwnd, TIMER_ID, TIMER_RATE, NULL ) )
	{
		initFail(hwnd, "Can't set timer.");
		return NULL;
	}

	se.CreateMap();
	UpdateFrame();
	ShowCursor(1);
    return hwnd;
} /* doInit */



// InitSurfaces - This function reads the bitmap file MAINMENU.BMP
// and stores it in offscreen surface 1 .
static BOOL InitSurfaces( void )
{
    HBITMAP hbm;

    // Load our bitmap resource.
    hbm = (HBITMAP)LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
    if (hbm == NULL) return FALSE;

    DDCopyBitmap(lpDDSOne, hbm, 0, 0,   800, 680);
    DeleteObject(hbm);
	DDSetColorKey(lpDDSOne, RGB(127,127,127));
    return TRUE;
} /* readBMPIntoSurfaces */

// WinMain - initialization, message loop
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG         msg;
	HWND		hwnd;
	PreButton = ButtonPressed =1;

    lpCmdLine = lpCmdLine;
    hPrevInstance = hPrevInstance;

	hwnd = doInit( hInstance, nCmdShow );
    if( !hwnd ) return FALSE;

    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
    }

	finiObjects();
    return msg.wParam;
} // WinMain

⌨️ 快捷键说明

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