求一voerlay实例,可以改变内容的
看了蚊子实例,但是我尝试去改变那蚊子的动作,创建一个位图,然后把BUF内容填进去,可是总是屏幕上是空的,什么也没有?
求指点。。。
static BOOL
LoadCameradataOntoSurface(LPDIRECTDRAWSURFACE lpdds,PBYTE cameradata)
{
HRESULT ddrval;
DDSURFACEDESC ddsd;
HDC hdcSurf = NULL;
if (!lpdds) return FALSE;
//
// get surface size and format.
//
memset(&ddsd, 0, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
ddrval = lpdds->GetSurfaceDesc(&ddsd);
if (FAILED(ddrval))
goto Exit;
ddrval = lpdds->GetDC(&hdcSurf);
if (FAILED(ddrval))
goto Exit;
HDC hdcMem;
//HDC hdc = GetDC(m_hWnd);
hdcMem = CreateCompatibleDC(NULL);
HBITMAP hBit=CreateDIBSection(hdcMem,&bmi,DIB_RGB_COLORS,(void **)&cameradata,0,0);
SelectObject(hdcMem,hBit);
//if (BitBlt(hdcSurf, 0, 0, WIDETH_PIXEL_UNIT, HEIGHT_PIXEL_UNIT, hdcMem, 0, 0, SRCCOPY) == FALSE)
// goto Exit;
StretchBlt(hdcSurf,0,0,WIDETH_PIXEL_UNIT,HEIGHT_PIXEL_UNIT,hdcMem,0,0,ddsd.dwWidth,ddsd.dwHeight,SRCCOPY);
RETAILMSG(1,(TEXT("BBBBBB%d\r\n"),GetTickCount()));
Exit:
if (hdcSurf)
lpdds->ReleaseDC(hdcSurf);
if (hdcMem)
DeleteDC(hdcMem);
//g_pDDSOverlay->UpdateOverlay(NULL, g_pDDSPrimary, NULL, DDOVER_SHOW, NULL);
}
[解决办法]
overlay没这么简单的,先得创建ddraw对象,再创建overlay表面和主表面,再把表面贴到主表面,最后再往这个表面填充数据。