关于DirectShow媒体播放器画面不显示的解决方法

最近写了一个小程序,基于DirectShow的媒体播放器。原理很简单,就是用ds的智能连接,构建起Graph后就可以了。

但是写完之后,有时会出现一个问题,就是明明已经开始播放了,但是看不到视频画面。这个现象有的时候又不会出现,很是奇怪。后来发现,只要用鼠标拖动一下窗口,就好了。在做视频采集的时候,也遇到过这个问题,但是没有重视,后来不知道怎么就不会出现了。

刚开始以为是把可见性属性设置成OAFALSE了,但明明是OATRUE。自己研究程序,翻来覆去看了很多遍,都没有找到问题出在了哪里。又看了一下sdk中的例子,好像没有什么马虎的地方。研究半天,无果,还是百度一下吧。

网上很多人也都遇到过这个问题,解释很多,但是都没有看懂,不过找到了解决方法:

1、增加WM_ERASEBKGND消息处理

2、在OnInitDlg()中:

m_viewWnd.ModifyStyle(0, WS_CLIPCHILDREN); 

3、消息处理函数中

CRect rc; m_viewWnd.GetWindowRect(&rc); //m_viewWnd为CStatic类型 ScreenToClient(&rc); pDC->ExcludeClipRect(&rc) 

这样就可以了。学习了一段时间的DirectShow,也遇到了各种各样的问题,应该说是自己慢慢摸索过来的,走了很多的弯路。以后争取多写一些自己的经验,以给正在学习或者以后会学习的人。也望发现新的问题的朋友留言提问,互相交流学习~

你可能感兴趣的:(百度,Graph)