DirectX: DirectDraw: Overlay页面不能设置Clipper?高手指教

wmrwinhap 2004-08-12 12:51:22
创建主窗口(m_hWnd为主窗口名柄)后,
对主页面设置Clipper有效,主页面的显示被限定在主窗口内不会覆盖它上面的窗口;
对Overlay页面为何不起作用呢?调用UpdateOverlay显示出Overlay页面后,它上面的窗口会被覆盖!!!

下面附上创建Overlay页面及设置Clipper的代码,请高手指点。

// 页面格式
DDPIXELFORMAT PixelFormat= { sizeof(DDPIXELFORMAT), DDPF_RGB, 0, 16, 0xF800, 0x07E0, 0x001F, 0 }; // RGB565

DDSURFACEDESC ddsd;
ddsd.dwSize=sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY; // OVERLAY类型
ddsd.dwWidth = 352;
ddsd.dwHeight = 288;
ddsd.ddpfPixelFormat=PixelFormat;

if(m_lpDD->CreateSurface(&ddsd,&m_lpDDSOverlay,NULL)==DD_OK) { // 创建页面
LPDIRECTDRAWCLIPPER lpClipper;
if(m_lpDD->CreateClipper(0,&lpClipper,NULL)==DD_OK) { // 创建CLIPPER
if(lpClipper->SetHWnd(0, m_hWnd)==DD_OK) { // 主窗口关联到CLIPPER
if(m_lpDDSOverlay->SetClipper(lpClipper)==DD_OK) { // CLIPPER关联到Overlay页面
MessageBox(NULL,"Clipper Attached to Overlay surface OK !","DirectX",MB_OK);
}
}
lpClipper->Release();
}
}
...全文
175 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wmrwinhap 2004-08-23
  • 打赏
  • 举报
回复
对,我的显示硬件很古老,支持RGB8、RGB555、RGB565、RGB24、RGB32等多种格式的OVERLAY表面以及这些格式的离屏表面,听说很多新显卡反倒不支持,奇怪!
我的显卡还支持Y411与YUY2格式的OVERLAY表面但不支持任何YUV格式的离屏表面。

最不解的是,OVERLAY表面设置为Y411或YUY2格式后,往lpSurface地址memcpy进去的数据还要是RGB格式就显示正常,填入Y411或YUY2格式的数据反倒显示不正常,太奇怪了不是?????
yturieo 2004-08-20
  • 打赏
  • 举报
回复
估计后面代码都没有执行到,当然不行了。

可能需要自己写代码去实现了。
DentistryDoctor 2004-08-12
  • 打赏
  • 举报
回复
首先问你,你的代码能创建成功RGB565的Overlay平面吗?
ErrorCode:88760104
ErrorString:DDERR_NOOVERLAYHW
Description:Operation could not be carried out because there is no overlay hardware present or available.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧