|
|
void GameInit(HWND hWnd)
{
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpDDraw7,
IID_IDirectDraw7, NULL)))
MessageBox(hWnd,"ddraw create error","ERROR",MB_OK);
//设置协作等级
if(FAILED(lpDDraw7->SetCooperativeLevel(hWnd,
DDSCL_FULLSCREEN |
DDSCL_ALLOWMODEX |
DDSCL_EXCLUSIVE |
DDSCL_ALLOWREBOOT
)))
MessageBox(hWnd,"setdisplaymodecreateerror","ERROR",MB_OK);
//设置显示模式
if(FAILED(lpDDraw7->SetDisplayMode(640,480,16,0,0)))
{
MessageBox(hWnd,"setdisplaymode create error","ERROR",MB_OK);
}
//创建主表面
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE; //该表面为主显示表面
if(FAILED(lpDDraw7->CreateSurface(&ddsd,&lpddsprimary,NULL)))
MessageBox(hWnd,"connot create surface","ERROR",MB_OK);
}
void GameMain(HWND hWnd)
{
//锁住主表面
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
if(FAILED(lpddsprimary->Lock(NULL,&ddsd,
DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL)))
{
MessageBox(hWnd, "connot lock the primarysurface","ERROR",MB_OK);
}
USHORT lpitch16=(USHORT)(ddsd.lPitch>>1);
USHORT * video_buffer=(USHORT *)ddsd.lpSurface;
for(int i=lpitch16*100+100;i<lpitch16*100+200;i++)
{
video_buffer=_RGB16BIT565(255,0,0);
}
//解锁主表面
if(FAILED(lpddsprimary->Unlock(NULL)))
MessageBox(hWnd,"connot unlock the primarysurface",ERROR,MB_OK);
}
void GameFini()
{
// the primary surface
if (lpddsprimary)
{
lpddsprimary->Release();
lpddsprimary = NULL;
} // end if
// now blow away the IDirectDraw interface
if (lpDDraw7)
{
lpDDraw7->Release();
lpDDraw7 = NULL;
} // end if
}
执行结果和预想的一样是画一条直线没有错误,但退出程序后出现发送错误报告,请问高手这是什么原因造成,画一个象素点的时候也同样错误 |
|