
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
DDSURFACEDESC2 ddsd; // surface description structure
LPDIRECTDRAWSURFACE7 lpddsPrimary = NULL; // primary surface
// set up primary drawing surface
INIT_DXSTRUCT(ddsd); // initialize ddsd
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; // valid flags
ddsd.dwBackBufferCount = 1; // one back buffer
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | // primary surface
DDSCAPS_COMPLEX | // back buffer is chained
DDSCAPS_FLIP | // allow page flipping
DDSCAPS_VIDEOMEMORY; // create in video memory
// create primary surface
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpddsPrimary, NULL)))
{
// error-handling code here
}
你当然还可以用CreateSurface()函数创建复杂表面,只是使用DDSCAPS_COMPLEX标志罢了。由于刚才我们创建了一个后缓冲区,所以我们还得必须得到指向它的指针。那就得调用IDirectDrawSurface7::GetAttachedSurface()函数了:
HRESULT GetAttachedSurface(
LPDDSCAPS2 lpDDSCaps,
LPDIRECTDRAWSURFACE7 FAR *lplpDDAttachedSurface
);
参数很简单啦:
· LPDDSCAPS2 lpDDSCaps:指向创建后缓冲区表面的DDSCAPS2结构。你就可以使用DDSCAPS2结构中相应的成员了。
· LPDIRECTDRAWSURFACE7 FAR *lplpDDAttachedSurface:后缓冲区表面指针的地址。简单理解为声明一个指针,然后把指针的地址传递给该参数。
看看下面的代码就明白了:
LPDIRECTDRAWSURFACE7 lpddsBack = NULL; // back buffer
// get the attached surface
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if (FAILED(lpddsPrimary->GetAttachedSurface(&ddsd.ddsCaps, &lpddsBack)))
{
// error-handling code here
}
感觉有点儿入门了吗?如果你很难记住以上步骤,那么你是一个正常人,反复运用就会熟悉了。没有人能记住所有的庞大的结构成员和标志常量,这就是我们手边总是准备程序员参考手册或者拥有MSDN Library CD的原因了^_^ !OK,最后一步是建立离屏缓冲区。假设它的宽400,高300,(单位是象素)代码如下:
LPDIRECTDRAWSURFACE7 lpddsOffscreen = NULL; // offscreen buffer
// set up offscreen surface
INIT_DXSTRUCT(ddsd); // initialize ddsd
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; // valid flags
ddsd.dwWidth = 400; // set width
ddsd.dwHeight = 300; // set height
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | // offscreen buffer
DDSCAPS_VIDEOMEMORY; // video memory
// create offscreen buffer
if (FAILED(lpdd7->CreateSurface(&ddsd, &lpddsOffscreen, NULL)))
{
// error-handling code here
}
表面这些学问就介绍到这儿,还有好多东西要介绍,可是唯一的问题是文章太长了,我们先暂停吧。你现在可以建立一个最基本的,但是什么也不显示的表面。
千万记住了,你使用的每一个DirectDraw接口和所有的表面,用完后一定要释放(Release)它们啊!切记、切记!!!!!!!
十.总结
很抱歉在这里中断了,尤其是你还没有看到显示的图形,但关于图形有太多的内容了,不是三言两语就能说清除的,所以放到下两章。下一章讨论DirectDraw中的调色板和象素,再下下一章讨论DirectDraw中的位图。精彩在后面哦!请耐心期待。
上一页 [1] [2] [3] [4] [5] [6] [7]