显示前判断是否表面丢失了,重绘下就可以了
if(表面->IsLost()==DDERR_SURFACELOST)
表面->Restore();

解决方案 »

  1.   

    do { 
    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); 
      

  2.   

    关于DirectDraw可以参看下面文章:
    http://www.joyvc.cn/GraphicAndMedia/GraphicAndMediaGroup00061.html
    http://www.joyvc.cn/GraphicAndMedia/GraphicAndMediaGroup00081.html
      

  3.   

    弄了好几天了,我发现可能是clipper有问题。似乎普通窗口clipper工作正常,但是如果针对半透明窗口遮盖,就没有用了。所以,导致了视频画到了遮盖画面的半透明窗口上。不知道谁知道解决这个问题的方法吗?
      

  4.   

    记得 在XP以下的系统上 启用DirectShow后,半透明效果会被禁用
      

  5.   

    //创建裁剪
    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();
      

  6.   

    //创建裁剪
    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();
      

  7.   


    谢谢这位大侠耐心解答。其实CLIPPER应该是创建成功了,因为普通的窗口遮挡画面的话,表现是正常的。但是,半透明的窗口可能比较特别,会闪——估计CLIPPER认为半透明窗口不算遮挡?这样就没起作用?
      

  8.   


    我说的以下包含xp, 你自己试试就知道了,先半透明一个窗口,然后用播放器放视频,那个半透明效果已经没了目前就看到 Vista下能实现 视频中半透明……
      

  9.   

    我在XP下面试验了一下,一个半透明窗口遮挡在KMPLYAER上面,播放正常,半透明窗口仍然为半透明,但是会把半透明窗口下的视频遮盖掉,但是其他部分仍然半透明——不知道这是如何实现的??我现在的状态是如果视频被半透窗口遮盖,就会闪的很厉害,感觉是画到了半透明窗口上一样。谢谢大家的耐心解答。