DirectX+win32最简化模板

// 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值