📄 directwnd.cpp
字号:
// DirectWnd.cpp: implementation of the CDirectWnd class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DirectWnd.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDirectWnd::CDirectWnd()
{
lpDD=NULL;
lpFrontBuffer=NULL;
lpBackBuffer=NULL;
nBufferCount=1;
}
CDirectWnd::~CDirectWnd()
{
if(lpDD)
{
CleanSurface();
lpDD->Release();
lpDD=NULL;
}
}
void CDirectWnd::CleanSurface()
{
if(lpBackBuffer)
{
lpBackBuffer->Release();
lpBackBuffer=NULL;
}
if(lpFrontBuffer)
{
lpFrontBuffer->Release();
lpFrontBuffer=NULL;
}
return;
}
void CDirectWnd::LoadBitmapResource()
{
lpBKGObject[0]=DDLoadBitmap(lpDD,"pictures//loading.bmp",640,480);
lpBKGObject[1]=DDLoadBitmap(lpDD,"pictures//choose.bmp",640,480);
lpBKGObject[2]=DDLoadBitmap(lpDD,"pictures//Tanks.bmp",32*8,32*16);
lpBKGObject[3]=DDLoadBitmap(lpDD,"pictures//Objects.bmp",7*32,32);
lpBKGObject[4]=DDLoadBitmap(lpDD,"pictures//Bullet1.bmp",4*8,8);
lpBKGObject[5]=DDLoadBitmap(lpDD,"pictures//birth.bmp",4*32,32);
lpBKGObject[6]=DDLoadBitmap(lpDD,"pictures//lossgame.bmp",640,480);
lpBKGObject[7]=DDLoadBitmap(lpDD,"pictures//bullet21.bmp",21*4,59);
lpBKGObject[8]=DDLoadBitmap(lpDD,"pictures//bullet22.bmp",59,21*4);
lpBKGObject[9]=DDLoadBitmap(lpDD,"pictures//bullet23.bmp",21*4,59);
lpBKGObject[10]=DDLoadBitmap(lpDD,"pictures//bullet24.bmp",59,21*4);
lpBKGObject[11]=DDLoadBitmap(lpDD,"pictures//explode1.bmp",32*7,32);
lpBKGObject[12]=DDLoadBitmap(lpDD,"pictures//explode2.bmp",32*10,32);
lpBKGObject[13]=DDLoadBitmap(lpDD,"pictures//explode3.bmp",32*8,32);
lpBKGObject[14]=DDLoadBitmap(lpDD,"pictures//explode4.bmp",32*5,32);
lpBKGObject[15]=DDLoadBitmap(lpDD,"pictures//plane.bmp",35,35);
lpBKGObject[16]=DDLoadBitmap(lpDD,"pictures//bonus.bmp",32,32*10);
lpBKGObject[17]=DDLoadBitmap(lpDD,"pictures//players.bmp",24*2,24);
lpBKGObject[18]=DDLoadBitmap(lpDD,"pictures//instruction.bmp",640,480);
lpBKGObject[19]=DDLoadBitmap(lpDD,"pictures//level.bmp",640,480);
}
void CDirectWnd::Create(LPCSTR lpszAppName)
{
CString className=AfxRegisterWndClass(
CS_DBLCLKS,
AfxGetApp()->LoadCursor(IDC_CURSOR),
NULL,
AfxGetApp()->LoadIcon(IDR_MAINFRAME) );
//===========================================
CWnd::CreateEx( WS_EX_APPWINDOW,
className,
lpszAppName,
WS_VISIBLE|WS_SYSMENU|WS_POPUP,
0,
0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),NULL,NULL );
//动态创建信息,通过调用父类的构造函数,被封装再CWnd::CreateEx()中
return;
}
BOOL CDirectWnd::InitializeWnd(UINT GModeX,UINT GModeY,UINT GBPP)
{
DDSURFACEDESC ddsd ; //表面描述
DDSCAPS ddscaps ;
::ZeroMemory(&ddsd,sizeof(ddsd));//清零(起始,长度)
//创建DirectDraw对象
DirectDrawCreate(NULL,&lpDD,NULL);
//取得独占和全屏模式
lpDD->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
//设置显示模式
lpDD->SetDisplayMode(GModeX,GModeY,GBPP);
//也可以加 HRESULT ddrval; 它是下面三个函数的返回值.
DDCAPS ddcaps;
ddcaps.dwSize=sizeof(ddcaps);
lpDD->GetCaps(&ddcaps,NULL);
//填充主表面信息
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount=nBufferCount;
//创建主表面对象
lpDD->CreateSurface(&ddsd,&lpFrontBuffer,NULL);
//提取后台缓存表面指针
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
lpFrontBuffer->GetAttachedSurface(&ddscaps,&lpBackBuffer);
LoadBitmapResource();
return TRUE;
}
void CDirectWnd::BltBitMap(LPDIRECTDRAWSURFACE bk,CRect &rt1,
LPDIRECTDRAWSURFACE bitmap,CRect &rt2)
{// rt2 ---> rt1
bk->Blt(
CRect(rt1.left,rt1.top,rt1.right,rt1.bottom),//dest rect
bitmap,//src surface
CRect(rt2.left,rt2.top,rt2.right,rt2.bottom),//src rect
DDBLT_WAIT,
NULL);
return;
}
void CDirectWnd::FlipScreen()
{
while(TRUE)
{
HRESULT ddrval;
ddrval=lpFrontBuffer->Flip(NULL,0); //一经Flip,两个表面的指针互换!
if(ddrval==DD_OK)break;
}
//==================清空
/* DDBLTFX ddbltfx;
ddbltfx.dwSize=sizeof(ddbltfx);
ddbltfx.dwFillColor=0;
ddrval=lpBackBuffer->Blt(
NULL,//dest rect
NULL,//src surface
NULL,//src rect
DDBLT_COLORFILL|DDBLT_WAIT,
&ddbltfx);
*/ return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -