Directshow 通过 put_Owner 指定显示窗口后,自动刷新问题
在Directshow中,我们可以对render指定显示窗口,在写程序的过程中, 发现通过put_Owner设置的显示窗口存在自动刷新问题,譬如窗口被遮挡然后再次露出时,被遮挡部分不能自动刷新,需要拖动窗口进行刷新。
网上搜索了一下,找到了解决问题的办法:
http://blog.csdn.net/lemon_wei/archive/2008/02/29/2132195.aspx
具体处理方法:
假设图象窗口的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);
其中的 ModifyStyle 中第二个参数dwstyle
- WS_BORDER
- Creates a window that has a thin-line border.
- WS_CAPTION
- Creates a window that has a title bar (includes the WS_BORDER style).
- WS_CHILD
- Creates a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.
- WS_CHILDWINDOW
- Same as the WS_CHILD style.
- WS_CLIPCHILDREN
- Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.
- WS_CLIPSIBLINGS
- Clips child windows relative to each other; that is, when a particular child window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it is possible, when drawing within the client area of a child window, to draw within the client area of a neighboring child window.
- WS_DISABLED
- Creates a window that is initially disabled. A disabled window cannot receive input from the user. To change this after a window has been created, use EnableWindow.
- WS_DLGFRAME
- Creates a window that has a border of a style typically used with dialog boxes. A window with this style cannot have a title bar.
- WS_GROUP
- Specifies the first control of a group of controls. The group consists of this first control and all controls defined after it, up to the next control with the WS_GROUP style. The first control in each group usually has the WS_TABSTOP style so that the user can move from group to group. The user can subsequently change the keyboard focus from one control in the group to the next control in the group by using the direction keys.
- You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.
- WS_HSCROLL
- Creates a window that has a horizontal scroll bar.
- WS_ICONIC
- Creates a window that is initially minimized. Same as the WS_MINIMIZE style.
- WS_MAXIMIZE
- Creates a window that is initially maximized.
- WS_MAXIMIZEBOX
- Creates a window that has a maximize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.
- WS_MINIMIZE
- Creates a window that is initially minimized. Same as the WS_ICONIC style.
- WS_MINIMIZEBOX
- Creates a window that has a minimize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The WS_SYSMENU style must also be specified.
- WS_OVERLAPPED
- Creates an overlapped window. An overlapped window has a title bar and a border. Same as the WS_TILED style.
- WS_OVERLAPPEDWINDOW
- Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. Same as the WS_TILEDWINDOW style.
- WS_POPUP
- Creates a pop-up window. This style cannot be used with the WS_CHILD style.
- WS_POPUPWINDOW
- Creates a pop-up window with WS_BORDER, WS_POPUP, and WS_SYSMENU styles. The WS_CAPTION and WS_POPUPWINDOW styles must be combined to make the window menu visible.
- WS_SIZEBOX
- Creates a window that has a sizing border. Same as the WS_THICKFRAME style.
- WS_SYSMENU
- Creates a window that has a window menu on its title bar. The WS_CAPTION style must also be specified.
- WS_TABSTOP
- Specifies a control that can receive the keyboard focus when the user presses the TAB key. Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style.
- You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.
- WS_THICKFRAME
- Creates a window that has a sizing border. Same as the WS_SIZEBOX style.
- WS_TILED
- Creates an overlapped window. An overlapped window has a title bar and a border. Same as the WS_OVERLAPPED style.
- WS_TILEDWINDOW
- Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. Same as the WS_OVERLAPPEDWINDOW style.
- WS_VISIBLE
- Creates a window that is initially visible.
- This style can be turned on and off by using ShowWindow or SetWindowPos.
- WS_VSCROLL
- Creates a window that has a vertical scroll bar.
Directshow 通过 put_Owner 指定显示窗口后,自动刷新问题的更多相关文章
- ASPX 关闭子窗口后自动更新父窗口
Response.Write("<script language:javascript>javascript:window.close();</script>&quo ...
- 黄聪:PHP如何实现延迟一定时间后自动刷新当前页面、自动跳转header("refresh:1;url={$url}");
//1秒后自动跳转 header("refresh:1;url={$url}"); exit; //1秒后自动刷新当前页面header("refresh:1;" ...
- Javascript实现页面加载完成后自动刷新一遍清除缓存文件
我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分 ...
- BrowserSync 热更新的使用(保存后自动刷新)
BrowserSync使用的优点,BrowserSync监听条件中的文件,发现更新会立刻刷新浏览器,就像 vue中的热更新一样,解放F5实现自动更新,提高开发效率, 解决了使用双屏幕时来回切换的烦恼! ...
- 问题解决——ShowWindow不显示窗口
配合任务栏通知区域. //MFC对话框程序 void CXXXDlg::OnShowHideUi() { // TODO: 在此添加命令处理程序代码 m_bShown=!m_bShown; ShowW ...
- gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全
gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...
- JAVA-JSP内置对象之response对象实现页面自动刷新
相关资料:<21天学通Java Web开发> response对象 实现页面自动刷新1.可以通过response对象的addIntHeader()方法添加一个标题为Refrsh的标头,并指 ...
- JSP中自动刷新
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/auto-refresh.html: 细想一个显示在线比赛分数.股市状态或当前交易额的网页.对于所有这种类 ...
- nodejs里的express自动刷新高级篇【转载】
搬运自[简书:http://www.jianshu.com/p/2f923c8782c8]亲测可用哦! 最近在使用express框架及mongodb,由于前端和后端代码修改后都需要实现自动刷新功能,刚 ...
随机推荐
- JBoss Jopr
http://rhq.jboss.org/ https://issues.jboss.org/browse/JBPAPP6-947 挺好的网站: http://outofmemory.cn/code- ...
- 玩转无线 — GNURADIO 简单运用
大家好, 我是Insight-labs的旺财,这里放出个旺财在Bsides Toronto 2013 会上RF-Ninjia Hacking议题中的一个案例,随着物联网越来越火热,而物联网又离不开无线 ...
- Delphi中三种方法获取Windows任务栏的高度
第一种:需要引用Windows单元 ShowMessage(IntToStr(GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYFULLSCREE ...
- BZOJ 1005 明明的烦恼 (组合数学)
题解:n为树的节点数,d[ ]为各节点的度数,m为无限制度数的节点数. 则 所以要求在n-2大小的数组中插入tot各序号,共有种插法: 在tot各序号排列中,插第一个节点的 ...
- word中创建文本框
word中创建文本框 在插入中点击"文本框"选项卡,例如以下图所看到的: 手工加入自己想要的文本框格式,然后选择所创建的文本框,在工具栏处会发现多了一 ...
- 关于js闭包是否真的会造成内存泄漏(转载)
闭包是一个非常强大的特性,但人们对其也有诸多无解.一种危言耸听的说法是闭包会造成内存泄露. 局部变量本来应该在函数退出的时候被解除引用,但如果局部变量被封闭在闭包形成的环境中,那么这个局部变量就能一直 ...
- asp.net js调用后台方法
先前网上百度了很多 ,大致都一样 但是不太详细,总是不成功,然后试了很多,把经验发给大家看看 前台js function aa() { //这里可以写你要带的参数用隐藏域放起来 __doPostBac ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- Smarterer Test
1.Using xp can swap two characters 2.In normal mode, use /abc/+4 can find the string "abc" ...
- 「C」 数组、字符串、指针
一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...