|

楼主 |
发表于 2004-4-8 23:53:00
|
显示全部楼层
Re:编DIRECTX截图,到LOCK时出错,请帮忙~
你好啊,感谢你的回复。按照你的要求对程序进行了简单修改,增加了CXxxDlg类定义;全都改为7版了。感觉程序有了进步。
文件开始修改定义为:
LPDIRECTDRAW7 lpdd = NULL;
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;
DDSURFACEDESC2 ddsd;
按下BUTTON:
void CXxxDlg::OnButton1()
{
DirectDrawCreateEx(NULL,(void**)&lpdd,IID_IDirectDraw7,NULL);
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if (FAILED(lpdd->CreateSurface(&ddsd,&lpddsprimary,NULL))){}
SetTimer(1,4000,NULL);
}
时间触发:
void CXxxDlg::OnTimer(UINT nIDEvent)
{
LPDIRECTDRAWSURFACE7 lpddsprimary = NULL;
if (SaveToBitmapFile(lpddsprimary,"d:\\t.bmp")) MessageBeep(MB_OK);
KillTimer(1);
MessageBeep(MB_OK);
CDialog::OnTimer(nIDEvent);
}
bool SaveToBitmapFile(LPDIRECTDRAWSURFACE7 lpSurface, char* filename)
{ WORD* lpBuffer; // 表面指针
int nPitch; // 表面跨距
int nWidth, nHeight; // 表面宽高
FILE* fp;
if( (fp=fopen(filename, "wb")) != NULL )
{
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
HRESULT ddrval = lpSurface->Lock( NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT, NULL );
if( ddrval == DD_OK )
{
运行后虽然还是LOCK地方报错,但通过与其他正常的画随机点的范例程序(在LOCK打断点)对比参数数值,只有在lpSurface的Iunknow的VALUE报CXX0030:Error:expression cannot be evaluated.和ddrva的VALUE是-868593460。其他参数例如DDSD等VALUE都已基本类似,呵呵。
另外还感谢你的鼓励~我会继续努力的。
|
|