📄 me_dx.cpp
字号:
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 + -