DirectDraw的学习笔记(5)

本文介绍了解决 DirectDraw Overlay 在显示过程中遇到的问题。通过设置 ColorKey 和使用 DDOVER_KEYSRCOVERRIDE 标志,成功实现了仅显示指定区域的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面进入我们的整体,overlay 
// create overlay
memset(&m_ddsd, 0, sizeof(m_ddsd));
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX |
DDSCAPS_VIDEOMEMORY;
m_ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_BACKBUFFERCOUNT;
m_ddsd.dwWidth = 480;
m_ddsd.dwHeight = 272;
m_ddsd.dwBackBufferCount = 1;
hr=m_pdd->CreateSurface(&m_ddsd,&m_osurf,NULL);


然後就依照慣例,Lock surface 取出 surface address 後就開始畫圖..
但是..顯示不出來..

是忘了要 Overlay SHOW 出來,要 ..


m_osurf->UpdateOverlay(NULL, m_psurf, NULL, DDOVER_SHOW,NULL);


但是...Show 出來後,整個畫面都是Overlay 的圖呀!我沒畫的部份也show出來,是黑的..

這是因為surface 是 RGB656,沒有 alpha 資料,所以不知道黑色是不是"穿透"色。

所以要設 ColorKey,告訴DirectDraw "黑色不要顯示":


DDOVERLAYFX ovfx;

memset(&ovfx,0,sizeof(ovfx));
ovfx.dwSize = sizeof(ovfx);
ovfx.dckSrcColorkey.dwColorSpaceLowValue=0; // black as the color key
ovfx.dckSrcColorkey.dwColorSpaceHighValue=0;
m_osurf->UpdateOverlay(NULL, m_psurf, NULL, DDOVER_SHOW | DDOVER_KEYSRCOVERRIDE | DDOVER_DDFX, &ovfx);

這樣就OK啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值