我用VC中的picture控件做一个播放视频的窗口,并用另一个子对话框来显示波形,希望做到半透明的子对话框嵌入到picture控件上用来显示波形,我调用user32.dll实现了子窗口的半透明化,并且在父对话框的大部分位置上子对话框能实现半透明的效果,但是唯独在播放视频的picture控件上不能实现半透明效果,问各位大哥大姐大虾们是什么原因啊?我已经把子对话框置于piture控件之上啦,还是不行啊。

解决方案 »

  1.   

    没办法,我曾经遇到类似的情况,在VISTA下可以实现半透明,在XP下大部分机器上都不能实现半透明效果。粗糙的解决办法是重置并刷新一下硬件加速设置就能显示,但随之而来会有好多问题。最终的解决办法是利用 VMR9 + GDI进行绘制
      

  2.   

    上楼大侠,能否给我详细介绍一下这个解决方法啊,我没有用过VMR9+GDI啊,小弟在此不胜感激。
      

  3.   

    自己下一个 DirectX SDK ,在DirectShow 目录下有VMR的示例
      

  4.   

    调用 user32.dll来使窗口半透明,只对顶层窗口有效吧?
      

  5.   

    请问bdzwj大侠,能否用vmr+gdi在视频流上进行实时绘制波形?
      

  6.   

    请问bdzwj大侠,能否用vmr+gdi在视频流上进行实时绘制波形?
      

  7.   

    能!两种办法,一种是直接使用 ID3DXLine 接口直接在VMR9 输出的时候绘制,一种方法你可以通过GDI把波形绘制到HBITMAP, 然后把HBITMAP转成成D3D纹理,然后直接用ID3DSprit对象绘制输出。 具体怎么实现就需要你参考PSDK 或者 DSDK了。 
      

  8.   

    再借问一下胡侃大侠,我实现的是实时画矩形方块,好像不能用ID3DXLine来画哦,请问,我应该用哪个函数或者接口来画呢?谢谢啦。
      

  9.   


    SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst = LoadLibrary("User32.DLL");
    if(hInst)
    {
    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
    MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)fun(this->GetSafeHwnd(),0,200,2);//0--255
    FreeLibrary(hInst);
      

  10.   

    ....漏了一个}加到::OnInitDialog()里。
      

  11.   

    SetLayeredWindowAttributes此函数不能再属性为 child none 的子对话框中实现吧!