![](https://csdnimg.cn/release/download_crawler_static/5117140/bg4.jpg)
hRet = g_pDD->CreateSurface(&ddsd, &g_pDDSPrimary, NULL);
if (hRet != DD_OK)
{
// g_pDDSPrimary points to the new surface.
}
else
{
// The surface was not created.
return FALSE;
}
g_pDDSPrimary 参数将指向由 CreateSurface 函数返回的主平面(primary
surface)的地址,如果调用成功的话.
指向主平面(primary surface)的指针有效后,就可以调用
IDirectDrawSurface7::GetAttachedSurface 方法去得到一个指向缓冲的指针.
如下:
ZeroMemory(&ddscaps, sizeof(ddscaps));
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
hRet = g_pDDSPrimary->GetAttachedSurface(&ddscaps, &g_pDDSBack);
if (hRet != DD_OK)
{
// g_pDDSBack points to the back buffer.
}
else
{
return FALSE;
}
如果 IDirectDrawSurface7::GetAttachedSurf ace 调用成功,g_pDDSBack 参数
将指向缓存区.
在主平面(primary surface)和后台缓冲(back buffer)创建完成后,例子 DDEx1
用 windows 标准 GDI 函数输出了一些文本在缓冲上.如下:
(注意使用 GDI 函数不一定就是 GDI 程序)
if (g_pDDSBack->GetDC(&hdc) == DD_OK)
{
SetBkColor(hdc, RGB(0, 0, 255));
SetTextColor(hdc, RGB(255, 255, 0));
if (phase)
{
GetClientRect(hWnd, &rc);
GetTextExtentPoint(hdc, szMsg, lstrlen(szMsg), &size);