In order to fill all or part of a surface with a single color, you can use the IDirectDrawSurface4::Blt method with the DDBLT_COLORFILL flag. This technique allows you to quickly erase an area or draw a solid-colored background.
The following example fills an entire surface with the color blue, after obtaining the numerical value for blue from the pixel format:
/* It is assumed that lpDDS is a valid pointer to
an IDirectDrawSurface4 interface. */
HRESULT ddrval;
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof(ddpf);
if (SUCCEEDED(lpDSS->GetPixelFormat(&ddpf))
{
DDBLTFX ddbltfx;
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwFillColor = ddpf.dwBBitMask; // Pure blue
ddrval = lpDDS->Blt(
NULL, // Destination is entire surface
NULL, // No source surface
NULL, // No source rectangle
DDBLT_COLORFILL, &ddbltfx);
switch(ddrval)
{
case DDERR_WASSTILLDRAWING:
.
.
.
case DDERR_SURFACELOST:
.
.
.
case DD_OK:
.
.
.
default:
}
}