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;