显示前判断是否表面丢失了,重绘下就可以了
if(表面->IsLost()==DDERR_SURFACELOST)
表面->Restore();
if(表面->IsLost()==DDERR_SURFACELOST)
表面->Restore();
解决方案 »
- 帮忙看看这个?(问题最下面红色部分)
- vc中CArchive和CFile的write函数冲突如何解决??
- ListCtrl控件中,当我用鼠标选中其中的某个item的时候执行某个处理,应该重载哪个消息?
- RUNTIME_CLASS()的作用??
- 写文件的问题在线等
- 有关netMeeting二次开发的easy问题!500分送上,给钱都行!
- 求坐标
- 如何在对话框显示完成后,立即自动弹出一个message box?
- 有谁会用CRichEditCtrl,请帮忙!
- 关于数据库的疑问
- MDI中如何将一个formview的dlg子窗口能在主窗口中居中显示
- 怎么才能在系统右键菜单("点击空白时候弹出的菜单")添加exe快捷方式(也就是直接点击这个项起动程序),不是单击文件时显示的菜单添加!!!!!
if(lpDDSPrimary->IsLost()==DDERR_SURFACELOST)
lpDDSPrimary->Restore();
if(lpDDSOffScr->IsLost()==DDERR_SURFACELOST)
lpDDSOffScr->Restore();
ddRval = lpDDSOffScr->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_WRITEONLY,NULL);
} while(ddRval == DDERR_WASSTILLDRAWING);
//填充表面...
lpDDSOffScr->Unlock(NULL);
ddRval = lpDDSPrimary->Blt(&tmpDest, lpDDSOffScr, &rctSour, DDBLT_WAIT, NULL);
http://www.joyvc.cn/GraphicAndMedia/GraphicAndMediaGroup00061.html
http://www.joyvc.cn/GraphicAndMedia/GraphicAndMediaGroup00081.html
IDirectDrawClipper *lpClipper=NULL;
hr = m_pDD->CreateClipper(NULL,&lpClipper,NULL);
if (FAILED(hr))
{
AfxMessageBox("创建裁剪区域失败。");
return FALSE;
} hr = lpClipper->SetHWnd(0,hWnd);
if (FAILED(hr))
{
AfxMessageBox("设置窗口裁剪区域失败。");
return FALSE;
}
hr = m_pddsFrontBuffer->SetClipper(lpClipper);
if (FAILED(hr))
{
AfxMessageBox("设置主图面的裁剪区域失败。");
return FALSE;
} lpClipper->Release();
IDirectDrawClipper *lpClipper=NULL;
hr = m_pDD->CreateClipper(NULL,&lpClipper,NULL);
if (FAILED(hr))
{
AfxMessageBox("创建裁剪区域失败。");
return FALSE;
} hr = lpClipper->SetHWnd(0,hWnd);
if (FAILED(hr))
{
AfxMessageBox("设置窗口裁剪区域失败。");
return FALSE;
}
hr = m_pddsFrontBuffer->SetClipper(lpClipper);
if (FAILED(hr))
{
AfxMessageBox("设置主图面的裁剪区域失败。");
return FALSE;
} lpClipper->Release();
谢谢这位大侠耐心解答。其实CLIPPER应该是创建成功了,因为普通的窗口遮挡画面的话,表现是正常的。但是,半透明的窗口可能比较特别,会闪——估计CLIPPER认为半透明窗口不算遮挡?这样就没起作用?
我说的以下包含xp, 你自己试试就知道了,先半透明一个窗口,然后用播放器放视频,那个半透明效果已经没了目前就看到 Vista下能实现 视频中半透明……