24小时学DX之第三小时——双缓冲

这篇博客详细介绍了在DirectX中实现双缓冲的技术,包括如何创建DirectDraw对象、设置控制级、创建主页面和后台缓存页面,以及如何进行图片的加载和绘制。通过示例代码展示了双缓冲在游戏和动画中的应用,帮助读者理解双缓冲在提高图像显示性能上的作用。
摘要由CSDN通过智能技术生成

#include "stdafx.h"
#define INITGUID
#include

#define SafeRelease(x) if (x) { x->Release(); x=NULL; }
#define IMAGE_COUNT 6 //图片数目

?

char file_names[IMAGE_COUNT][256] = {??
?"E:/CJD/素材/pic/魔兽/1.bmp",
?"E:/CJD/素材/pic/魔兽/2.bmp",
?"E:/CJD/素材/pic/魔兽/3.bmp",
?"E:/CJD/素材/pic/魔兽/4.bmp",
?"E:/CJD/素材/pic/魔兽/5.bmp",
?"E:/CJD/素材/pic/魔兽/6.bmp"
};//图片列表


//函数声明
BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
int cur_image=0;//当前图片号

//变量说明
HWND hWnd; //窗口句柄

/*=============================================================================
LPDIRECTDRAW7和LPDIRECTDRAWSURFACE7类型(7是版本号)是在ddraw.h头文件里预定义的,
指向IDirectDraw7和IDirectDrawSurface7类型的长型指针(前面加的LP代表Long Point),
从后面用的是"->"而不是"."也可以看出这一点。

DD是DirectDraw的缩写,DDS是DirectDrawSurface的缩写,
因此习惯上我们把变量名起为lpDD和lpDDSXXX。


虽然VC.net自带的DirectX SDK是8.1版的,
但是由于Microsoft从DirectX 8.0起停止了对DirectDraw的更新,
所以DirectDraw目前的最新版本还是7.0。
===============================================================================*/

LPDIRECTDRAW7 lpDD=NULL;// DirectDraw对象的指针
LPDIRECTDRAWSURFACE7 lpDDSPrimary=NULL;// DirectDraw主页面的指针
LPDIRECTDRAWSURFACE7 lpDDSBuffer=NULL;// DirectDraw后台缓存页面的指针
LPDIRECTDRAWSURFACE7 lpSlides[IMAGE_COUNT];//图片存储空间

RECT rect;

?

void MakeRect (int left, int top, int right, int bottom)
{
?rect.bottom = bottom;
?rect.left = left;
?rect.right = right;
?rect.top = top;
}


LPDIRECTDRAWSURFACE7 bitmap_surface(LPCTSTR file_name)
{
?HDC hdc;
?HBITMAP bit;
?LPDIRECTDRAWSURFACE7 surf;
?//载入BMP
?bit=(HBITMAP) LoadImage(NULL,file_name,IMAGE_BITMAP,0,0,
??LR_DEFAULTSIZE|LR_LOADFROMFILE);
?if (!bit)//载入失败,返回NULL
??return NULL;
?//获得BMP尺寸
?BITMAP bitmap;
?GetObject(bit, sizeof(BITMAP), &bitmap );
?//保存BMP尺寸
?int surf_width = bitmap.bmWidth;
?int surf_height = bitmap.bmHeight;

?//创建页面
?HRESULT ddr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值