DirectX是Microsoft(微软)推出的一套函数库,这套函数库可以用于游戏,多媒体等软件开发,它内部包含了很多子模块,其中用于图形绘制的
模块称之为DirectX Graphics ,DirectX Graphics 又分为了二维回执和Draw和三维绘制的3D,我们使用的Direct3d draw来搭建图形学习的环境
因为DirectX提供了可以几乎操作显存的能力,所以比操作系统 提供的GDI(GraphicsDeviceInterface)快的很多.
注意在学习DirectX的时候需要安装他的SDK 还需要在IDE编译器中包含lib 和 include 文件等
PS:下面的代码我写的Dx = directX
此处包含了dx draw的头文件
#include <ddraw.h>
#pragma comment(lib, "ddraw.lib")
#pragma comment(lib, "dxguid.lib")
#pragma comment表示链接上面的两个库
LPDIRECTDRAW7 g_ddraw; //表示创建了dxdraw对象
//函数使用:
DirectDrawCreateEx()//此函数表示创建dxdraw对象
DirectDrawCreateEx( 0 , (void**)&g_ddraw,IID_IDirectDraw7,0);
第一个参数是lpGUID:指向DirectDraw接口的全局唯一标志符(GUID:Global unique identify)的指针。在这里,我们给它NULL,
表示我们将使用当前的DirectDraw接口。//沉默接口
第二个参数是lplpDD:这个参数是用来接受初始化成功的dxDraw对象的地址
第三个参数是pUnkOuter:代表了DxDraw对象的一个ID号 注意: 确保加入了dxguid.lib这个库: #pragma comment (lib, "dxguid.lib")
第四个参数pUnkOuter 在 DirectX7手册中解释道: 允许未来与组件聚合功能的兼容性。然而,目前,这种方法返回一个错误,如果这个参数是空的。当然我们还是写0为沉默参数
此函数返回值在手册中解释如下
If the function succeeds, the return value is DD_OK.//如果是正确的则返回DD_OK
If it fails, the function can return one of the following error values: //返回错误就为0
//设置dxDraw与操作系统的协调层级,因为dxDraw可以
//绕开操作系统直接和硬件的驱动程序交互,而此时操
//作系统也要访问硬件的驱动,那么就必须双方进行协
//商共用的方案,这种协商和我们应用程序如果使用dxDraw
//有关系的,如果就是一般的窗口程序中使用dxDraw那
//么设置为DDSCL_NORMAL即可,表示一般的层级,如果
//我们要独占显卡那么就必须设置为DDSCL_FULLSCREEN
//、DDSCL_EXCLUSIVE、DDSCL_ALLOWREBOOT,这样的组
//合就是一般进行全屏游戏开发使用的标记
此时我们就可以用g_ddraw指出成员了,他是一个指针
g_ddraw->SetCooperativeLevel(g_hWnd, DDSCL_NORMAL);
此时我们可以创建一个ddsd 来得到当前显卡工作模式
DDSURFACEDESC2 ddsd;
ddsd.dwSize = sizeof(DDSURFACEDESC2);
PS:此图片表示DDSURFACEDESC2 结构体的参数。
ddsd.dwSize = sizeof(DDSURFACEDESC2);
g_ddraw->GetDisplayMode(
&ddsd);
//设置当前显卡的工作模式
g_ddraw->SetDisplayMode(
//水平分辨率
ddsd.dwWidth,
//垂直分辨率
ddsd.dwHeight,
//位深
ddsd.ddpfPixelFormat.dwRGBBitCount,
//刷新率
0,
//默认的参数
DDSDM_STANDARDVGAMODE);
最后记得release()此指针
写法g_ddraw->Release();