请教一个纠结了几天的问题:环境VS2008,C++.在一个picture控件上显示视频,然后再这个视频窗口上绘图,绘的图狂闪。不知道怎么解决。请高手指教。我把视频显示和绘图是写在timer里面的。按照我的想法是,把图绘在控件上,只要不调用刷新函数,此picture控件显示的还是原来的图形,只有调用Invalidate(UpdateData)才会刷新。但是现在窗口才狂闪。不知道怎么解决。 不知道有没有做机器视觉方面的高手能帮帮忙

解决方案 »

  1.   

    不一定非要调用Invalidate函数
    不知道你是怎么刷的,是将数据先保存下来,然后再在OnPaint里面刷的,还是直接获得picture控件的DC,在这个DC上刷的,如果是后者就不需要调用Invalidate函数。还有如果非要用的话,还是建议使用InvalidateRect这个函数,刷新局部,避免全局刷新导致的闪烁论坛签名======================================================================slshelly:你好!
    截至 2011-03-29 10:04:22 前:
    你已发帖 27 个, 未结贴 1 个;
    结贴率为: 96.30%
      

  2.   

    我是这样的nLines=::StretchDIBits(hDC,//
                            Left,
                             Top,
                           Width,
                          Height,
                               0,
                               0,
                           Width,
                          Height,
                       pImagePtr,
                      (PBITMAPINFO)&BitmapInfo,
                       DIB_RGB_COLORS,
                         SRCCOPY);
    hDC就是控件的DC ,BitmapInfo就是图像信息
      

  3.   

    该函数是这样写的:
    void Draw(HDC hDC)
    {
    ::SetStretchBltMode(hDC,COLORONCOLOR);//该函数可以设置指定设备环境中的位图拉伸模式::StretchDIBits(hDC,//
                            Left,
                             Top,
                           Width,
                          Height,
                               0,
                               0,
                           Width,
                          Height,
                       pImagePtr,
                      (PBITMAPINFO)&BitmapInfo,
                       DIB_RGB_COLORS,
                         SRCCOPY);        ::MoveToEx(hDC,100,100,NULL);
            ::LineTo (hDC,500,100);
            ::LineTo(hDC,500,500);
            ::LineTo(hDC,100,500);
            ::LineTo(hDC,100,100);
    }在timer里调用这个函数,显示窗口就会闪烁,我知道是因为  
    ::MoveToEx(hDC,100,100,NULL);
            ::LineTo (hDC,500,100);
            ::LineTo(hDC,500,500);
            ::LineTo(hDC,100,500);
    导致的,但是我不知道怎么解决?
            ::LineTo(hDC,100,100);
      

  4.   

    视频同时也在刷新啊,也就把你画的给盖住了,然后你在TIMER里面画出来,效果就是闪烁.
      

  5.   

    slshelly,美女啊,我也是用双缓冲啊,可是咋播放的时候还是不出来呢,但是停止的时候是有线的啊,求指教啊,我邮箱[email protected],谢了