科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件DirectDraw之C#入门攻略

DirectDraw之C#入门攻略

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

DirectX本身为游戏开发的一套SDK,其本身原来仅仅是用来与OpenGL,3DFX竞争的一套用于视频游戏开发的SDK

作者:林敏 来源:aspcn 2007年11月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
DirectDraw篇

  DxVBLib.DirectDraw7 dDraw

  按照刚才所说的步骤,先由dx-------DirectX7结构实体来创建一个DDraw接口实体用来完成后面的步骤;

DxVBLib.DirectDraw7 dDraw=dx. DirectDrawCreate(guid);

  GUID是一个长达128位的结构(Structrue),是接口的代号对每一个借口都是不同的,可以用dx.CreateNewGuid()或者System.Guid.NewGuid().ToString()获得。其实我们在这里并不需要通过这个GUID接口来访问DDraw接口的实体,所以让GUID=""就可以了.

  设置DDraw的显示方式;

dDraw. SetCooperativeLevel(this.Handle.ToInt32(),
DxVBLib.CONST_DDSCLFLAGS.DDSCL_NORMAL);

  frm就是当前窗体。这里我们先建立一个非独占的DDraw用来在我们的窗体上显示图像。

DxVBLib.CONST_DDSCLFLAGS.下面的对象可以用于DDraw模式的设置。
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_FULLSCREEN(全屏模式)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_ALLOWMODEX(允许使用ModeX)
file://DxVBLib.CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE(独占模式)

  上面几种是常用的模式。其中后面两种必须与DDSCL_FULLSCREEN一起使用。使用多个参数用以下格式

    参数1|参数2|参数3

  其它的DirectX的参数用法也是相同的,这些参数也就是一些功能的开关,直接会影响到显示的效果。要了解其他参数最好还是看看在线帮助。

  设置DirectDrawSurface7,Surface是DirectDraw用来存放图像信息和显示图像的内存/显存区域,也就是DDraw控制显示图像的实体。它是通过一个DDSURFACEDESC与之对应来设置,该存储区的解释方式,和信息格式等信息。并不是所有的Surface都是可见,有的Surface仅仅是用于存储将要处理的图像信息。因此,显示的内存区域PRIMARYSURFACE和OVERLAY一般都在显存。(OverLay需要硬件支持,一般用作桌面悬浮层,它的显示区域是专门划分的有别于普通的显存)而其它的surface一般都是放在系统内存中,当然你也可以使用DSCAPS_VIDEOMEMORY/ DDSCAPS_SYSTEMMEMORY来指定surface存放的位置。我现在就需要两个surface,一个作为Primary,另一个则是用作存放从硬盘读取来的图片数据。最后,再把数据转换到Primary。
PrimarySurface如此之重要,是不能直接操作的。

DxVBLib.RECT rect,rectSec;
DxVBLib.DDSURFACEDESC2 dDDesc=new DxVBLib.DDSURFACEDESC2();
DxVBLib.DirectDrawSurface7 dDsurface;
DxVBLib.DDSURFACEDESC2 dDDesc1=new DxVBLib.DDSURFACEDESC2();
DxVBLib.DirectDrawSurface7 dDsurfaceSec;
dDDesc.lFlags=DxVBLib.CONST_DDSURFACEDESCFLAGS.DDSD_CAPS; dDDesc.ddsCaps.lCaps=DxVBLib.CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE;
dDsurface=dDraw.CreateSurface(ref dDDesc);
dDsurfaceSec=dDraw.CreateSurfaceFromFile("c:\\3.bmp",ref dDDesc1);
rect.Top=0;
rect.Left=0;
rect.Right=dDDesc1.lWidth; / /按图片本身大小显示
rect.Bottom= dDDesc1.lHeight;
dDsurface.BltFast(0,0,dDsurfaceSec,ref rect,DxVBLib.CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT);//将图象在屏幕上显示
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章