none
IE9中运行Activex控件时,控件中创建YUV离屏表面失败 RRS feed

  • 问题

  • 在IE8中开发的ActiveX控件,运行正常;
    升级到IE9后,运行控件,创建离屏表面失败。创建代码如下:

    DDSURFACEDESC ddsd;
    HRESULT  hr;
    INIT_DIRECTDRAW_STRUCT(ddsd);
    DDPIXELFORMAT  ddPixelFormat;
    memset(&ddPixelFormat,0,sizeof(DDPIXELFORMAT));
    ddPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
    ddPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV;
    ddPixelFormat.dwFourCC = MAKEFOURCC('Y', 'U', 'Y', '2');
    ddPixelFormat.dwYUVBitCount = 16;
    ddsd.dwFlags= DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH| DDSD_PIXELFORMAT;
    memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT)); 
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwWidth = 352;
    ddsd.dwHeight = 288;
    hr = m_pDDraw->CreateSurface(&ddsd, &m_pOverlaySurf[index], NULL);

    失败后hr的值为:DDERR_INVALIDPIXELFORMAT

    2011年4月12日 8:59

答案

  • DirectDraw啊,IE9换Direct2D了,应该是用IViewObjectPresentSite

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年4月26日 9:56
    2011年4月15日 4:37
    版主

全部回复

  • DirectDraw啊,IE9换Direct2D了,应该是用IViewObjectPresentSite

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2011年4月26日 9:56
    2011年4月15日 4:37
    版主
  • 我也遇到这个问题,不过我发现如果网页中含有alpha滤镜创建表面失败,去掉就好。但是假如在一个有alpha滤镜的页面上加载含directdraw插件的网页时创建表面还是会失败。


    • 已编辑 kgzhw 2011年10月11日 7:39
    2011年10月11日 7:29
  • 还真是这样的。但为什么IE8下含有alpha滤镜的网页加载含directdraw插件的网页创建表面就会成功呢?


    保持清醒
    2011年12月17日 10:14