视频是用VLC播的,传个窗口句柄就行了
但是想在上面画图,视频是自己不断在播放的
弄了窗口和控件,可还是会被刷新的,感觉是谁会刷新就会跑到前面,并没有各自独立,类似图层的效果

解决方案 »

  1.   

    获取播放视频的位置。用DC画,具体操作放在OnPaint()中,这样的话一直更新。人眼看不出来
      

  2.   

    (beigongmurong)你的意思是不是:不断的在视频上面画图?
      

  3.   

    (beigongmurong)
    是不是对于已经画好的东西,视频刷新掉,我再不断的又重绘上去?
    这样做好勉强啊,而且效果好不好呢?
      

  4.   

    我理解错了,(beigongmurong)的意思应该是都在一个窗口下绘图,但是我是直接把句柄传给播放器播放的,好像没法在OnPaint()中做操作吧?
    自己顶一下,求思路...
      

  5.   

    如果是别的程序,因为多数视频是以Overlay方式绘制的,它在显卡驱动中是高优先并利用硬件加速绘制的,GDI什么的级别要比这个低。但是有个变通的方法,就是你在播放视频时用Print Screen截图,这个时候粘贴到Photoshop中,应该只能看到类似黑色的东西。这个就是Key色。Overlay绘制时为了能正确显示到窗口里,会在窗口中填充某种特定色。比如RealPlayer就是(15,15,15)。你只要做一个无边框的窗口,背景色弄成这个Key色,放上文字,再保持在VLC前面就行了。但是这个方式不靠谱,如果对方禁用了硬件加速就无效了。
    如果是自己显示视频的话,用DirectShow很容易覆盖文字,再显示,这个方式最通用最可靠。
      

  6.   

    http://blog.csdn.net/liunian17/article/details/8237957
      

  7.   

    LRESULT CALLBACK OnCaptureVideo(HWND hWnd,LPVIDEOHDR lpVHdr)
    {
    AfxGetMainWnd()->PostMessage(WM_PAINT);
    return 0;
    }
    BOOL  C***::OnInitDialog()
    {
    capSetCallbackOnFrame(m_hCapWnd,OnCaptureVideo);
    }
    void C***::OnPaint()
    {
    CClientDC ccdc(this);
     
        //绘制直线
        ccdc.MoveTo(this->m_pStart);
        ccdc.LineTo(this->m_pEnd);
    }