现在很多显卡都能支持VMR9来显示了,不过有些机子还是不行,所以只能用老的显示方法(IVideoWindow),但刷新有问题,在网上找了好久,下面这个答案解决了我的问题。
使用了put_owner的问题,这是由于其没有消息循环所导致的
如下引用:
经常有刚接触的朋友问关于这类的问题,什么图象不刷新,拖动一下窗口就出来了呀等,在此我将相关处理方法写一下。
假设图象窗口的picture控件id为IDC_FRAME_VIEW,
pViewWindon 为 IVideoWindow*接口,作四步处理
1、修改显示控件属性
CWnd* pWnd = GetDlgItem(IDC_FRAME_VIEW);
pWnd->ModifyStyle(0, WS_CLIPCHILDREN);
2、设置为子窗口的句柄
CWnd* pWnd = GetDlgItem(IDC_FRAME_VIEW);
put_Owner((OAHWND)pWnd->GetSafeHwnd( ))
3、OnPaint 不用动
4、OnEraseBkgnd 加如下代码
RECT rect;
CWnd* pWnd = GetDlgItem(IDC_FRAME_VIEW);
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
pDC-> ExcludeClipRect(&rect);
return CDialog::OnEraseBkgnd(pDC);