// Ecust.cpp : Defines the entry point for the application.
//
#pragma comment( lib, "ddraw.lib" )
#include <windows.h>
#include <ddraw.h>
#include <math.h>
#include "ddutil.h"
#include <stdio.h>
#include <stdarg.h>
//------------------ddraw页面标号-----------//
const int DDSNum = 3;
const int SPrimary = 0;
const int SBuffer = 1;
const int STitle1 = 2;
const DWORD SrcKey=DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT;
const DWORD NoKey=DDBLTFAST_NOCOLORKEY| DDBLTFAST_WAIT;
HWND hwnd;
RECT rect;
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE DDS[DDSNum];
int SW[DDSNum];
int SH[DDSNum];
bool gameStart=FALSE;
bool keys[256];
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
void game_Init();
void DrawTitle();
void MakeRect(int left, int top, int right, int bottom);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
WNDCLASS wc;
BOOL done=FALSE;
wc.style = NULL;
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "game_Demo";
RegisterClass(&wc);
hwnd = CreateWindow("game_Demo",
"A Simple Game",
WS_POPUP|WS_MAXIMIZE,0,0,
GetSystemMetrics( SM_CXSCREEN ),
GetSystemMetrics( SM_CYSCREEN ),
NULL,NULL,hInstance,NULL);
if( !hwnd ) return FALSE;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
game_Init();
while(!done)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message==WM_QUIT)
{
done=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
if (keys[VK_ESCAPE]) // Was ESC Pressed?
{
done=TRUE; // ESC Signalled A Quit
}
else
{
if(gameStart)
{
}
else
{
DrawTitle();
}
}
}
}
return 0;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_KEYDOWN:
{
keys[wParam] = TRUE;
return 0;
}
case WM_KEYUP: // Has A Key Been Released?
{
keys[wParam] = FALSE; // If So, Mark It As FALSE
return 0; // Jump Back
}
case WM_SETCURSOR:
{
SetCursor(NULL);break;
}
case WM_DESTROY:
{
PostQuitMessage (0) ;
return 0 ;
}
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
void game_Init()
{
int index;
//-----------------------------初始化DirectDraw----------------------
DDSURFACEDESC ddsd;
DirectDrawCreate(NULL,&lpDD,NULL);
lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
if (lpDD->SetDisplayMode(640,480,32)!=DD_OK)
lpDD->SetDisplayMode(640,480,24);
//-----------------------------初始化各页面--------------------------
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
lpDD->CreateSurface(&ddsd,&DDS[SPrimary],NULL);
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
DDS[SPrimary]->GetAttachedSurface( &ddsd.ddsCaps, &DDS[SBuffer] );
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
SW[SPrimary] = SW[SBuffer]=640;
SH[SPrimary] = SH[SBuffer]=480;
SW[STitle1] = 336; SH[STitle1] = 480;
for (index=2;index<DDSNum;index++)
{
ddsd.dwWidth=SW[index];
ddsd.dwHeight=SH[index];
lpDD->CreateSurface( &ddsd, &DDS[index], NULL );
}
//-----------------------------清空页面------------------------------
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillPixel=0;
for(index=0;index<DDSNum;index++)
{
DDS[index]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
}
//-----------------------------向页面调入图像------------------------
DDReLoadBitmap(DDS[STitle1],"pic//title1.bmp");
//-----------------------------设置透明色----------------------------
for(index=0;index<DDSNum;index++)
{
DDSetColorKey(DDS[index],RGB(0,0,0));
}
}
void DrawTitle()
{
MakeRect(0,0,336,480);
DDS[SPrimary]->BltFast(135,0,DDS[STitle1],&rect,NoKey);
if(keys['J']) gameStart=TRUE;
}
void MakeRect(int left, int top, int right, int bottom)
{
rect.bottom=bottom;
rect.left=left;
rect.right=right;
rect.top=top;
}