大家好,我的程序是这样的:一个dialog里面有个picture control, 用来做directshow的视频播放。开始播放后画面会出来,一切正常。现在的问题是,当此dialog最小化,再恢复时,视频画面一闪而过变成了picture control的底色灰色。只有拖动一下dialog画面才会出来。或者在没有最小化的情况下,直接切换到一个别的最大化的窗口,再切换回来时也会有相同的状况(估计dialog在后台被自动最小化了)。请问如何解决!!另:
1. 参考了别人播放画面刷新的问题,我重载了OnPaint和OnEraseBkgnd,都分别加了ExcludeClipRec,却没有起任何作用!
2. 当别的未最大化的窗口半遮或全遮住视频窗口,画面都能正常刷新。
谢谢大家!!!!
1. 参考了别人播放画面刷新的问题,我重载了OnPaint和OnEraseBkgnd,都分别加了ExcludeClipRec,却没有起任何作用!
2. 当别的未最大化的窗口半遮或全遮住视频窗口,画面都能正常刷新。
谢谢大家!!!!
解决方案 »
- 第一次MCI编程,帮帮忙!
- 如果显示对话框中间部分?
- 高分求助:一个vc6控制台程序,为何通不过??提示:error C2440: '=' : cannot convert from 'void *' to 'void *(__cdecl *)(void)
- 关于socket的send这个API的问题
- 怎樣可以設定靜態文本框裏的字體格式呢???
- 怎么截获一个Dialog的按键消息
- vc下怎么实现类似于网页上图形热点的功能?
- ?画刷原点.(还望师兄不吝赐教)
- Visual C++哪里有下
- 用钩子捕获到了消息,得到了hwnd,却不能知道这个消息是发给哪个窗口的,这很让人郁闷 o(-"-)o
- 如何加粗显示active project?
- 程序运行起来发现CPU使用率过高,有什么办法改善吗?
曾经做过,不过不大记得了,现在我机器上又没有源码,可能是在OnSize里要做一下恢复正常播放的.
2。修改控件的属性,添加处理消息
3。不使用默认的render filter,手动添加使用VMR9,其自动处理刷新问题
可能我說的是不對,現在的情況就是要移動下窗體,圖像才能出來。
要移動下窗體,圖像才能出來,這就是LZ本來問的和要解決的問題。
pVidWin->put_Owner((OAHWND)m_hWnd);
pVidWin->put_WindowStyle(WS_CHILD| WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
然后OnPaint里也有ExcludeClipRec。是这样吗?但还是不行啊!
要解决这个问题,你现在可以:1。直接put_owner在窗体上,由窗体的WM_PAINT来刷新
2。修改控件的属性,添加处理消息
3。不使用默认的render filter,手动添加使用VMR9,其自动处理刷新问题
BOOL CYourDlg::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
2、显示控件(就叫m_view吧)得修改属性 m_view.ModifyStyle(0, WS_CLIPCHILDREN);
3、OnPaint 不用动
4、OnEraseBkgnd 加如下代码
RECT rect;
m_view.GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->ExcludeClipRect(&rect);
return CDialog::OnEraseBkgnd(pDC);
to lemon_wei:
你说的我都照样做了,还是不行。特别是加了m_view.ModifyStyle(0, WS_CLIPCHILDREN)之后,刚开始播也没有画面,也要拖一下才有,越来越糟了。(原本是ModifyStyle(0, WS_CLIPCHILDREN),即对对话框modify style)。---------------
看来也没能解决我的问题,再等等就结贴算了。
LPDIRECTDRAWSURFACE2->UpdateOverlay(...);
这个可以保证画面始终在你需要的图层上刷新!
要是不放便你给个邮件地址也行,我给你传个例子
2、GetDlgItem(IDC_VW_FRAME)->ModifyStyle(0, WS_CLIPCHILDREN);
3、OnPaint 不用动
4、OnEraseBkgnd 加如下代码
RECT rect;
GetDlgItem(IDC_VW_FRAME)->GetWindowRect(&rect);
ScreenToClient(&rect);
pDC-> ExcludeClipRect(&rect);
return CDialog::OnEraseBkgnd(pDC); ---------------结贴。再次感谢lemon_wei和其他同志的热情相助!
搞定
不好意思
小弟新手,刚学vc
2、GetDlgItem(IDC_VW_FRAME)->ModifyStyle(0, WS_CLIPCHILDREN);
3、OnPaint 不用动
4、OnEraseBkgnd 加如下代码
RECT rect;
GetDlgItem(IDC_VW_FRAME)->GetWindowRect(&rect);
ScreenToClient(&rect);
pDC-> ExcludeClipRect(&rect);
return CDialog::OnEraseBkgnd(pDC);
请问下楼主这个在代码的什么地方加呢 我是个新手 但是也遇到同样的问题