DirectDraw 笔记1

if(FAILED(DirectDrawCreate(NULL,&lpdd,NULL)))return 0;
 lpdd->QueryInterface(IID_IDirectDraw7,(LPVOID*)&lpdd7);
 if(FAILED(lpdd7->SetCooperativeLevel(main_window_handle,DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE|DDSCL_ALLOWREBOOT|DDSCL_ALLOWMODEX)))return 0;
 if(FAILED(lpdd7->SetDisplayMode(640,480,8,0,0)))return 0;
 
 PALETTEENTRY palette[256];
 for(int i=1;i<255;i++)
 {
  palette[i].peRed=rand()%256;
  palette[i].peGreen=rand()%256;
  palette[i].peBlue=rand()%256;
  palette[i].peFlags=PC_NOCOLLAPSE;  ///不希望DirectX优化你的调色板
 }
 palette[0].peRed=0;
 palette[0].peGreen=0;
 palette[0].peBlue=0;
 palette[0].peFlags=PC_NOCOLLAPSE;

 palette[255].peRed=255;
 palette[255].peGreen=255;
 palette[255].peBlue=255;
 palette[255].peFlags=PC_NOCOLLAPSE;

 if(FAILED(lpdd7->CreatePalette(DDPCAPS_8BIT|   //8位色彩,色表包含256项
  DDPCAPS_ALLOW256|                //表示这个调色板可以定义所有256项
  DDPCAPS_INITIALIZE,palette,&lpddpal,NULL)))               //用lpDDColorArray 传递的色彩数组中的色彩初始化调色板
  return 0;
 创建一个主显示表面
  //1. 填充一个DDSURFACEDESC2 数据结构
 DDSURFACEDESC2 ddsd;
 memset(&ddsd,0,sizeof(ddsd));
 ddsd.dwSize=sizeof(DDSURFACEDESC);
 ddsd.dwFlags=DDSD_CAPS;///说明结构那个域是有效的
 ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
 if(FAILED(lpdd7->CreateSurface(&ddsd,&lpddsprimary,NULL)))return 0;

 创建主显示表面后要关联调色板
 if(FAILED(lpddsprimary->SetPalette(lpddpal)))return 0;

  memset(&ddsd,0,sizeof(ddsd));
 ddsd.dwSize=sizeof(ddsd);
 if(FAILED(lpddsprimary->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL)))return 0;   ///表示将指向一个有效内存指针,指向特定RECT的顶部,若无矩形,则返回一个指向显示表面顶部的指针
 int mempitch=ddsd.lPitch;
 UCHAR* video=(UCHAR*)ddsd.lpSurface;
 for(int index=0;index<1000;index++)
 {
  UCHAR color=rand()%256;
  int x=rand()%640;
  int y=rand()%480;
  video[x+y*mempitch]=color;
 
 }
 if(FAILED(lpddsprimary->Unlock(NULL)))return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值