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

[c-sharp] view plaincopy

  1. WS_BORDER
  2. Creates a window that has a thin-line border.
  3. WS_CAPTION
  4. Creates a window that has a title bar (includes the WS_BORDER style).
  5. WS_CHILD
  6. Creates a child window. A window with this style cannot have a menu bar. This style cannot be used with the WS_POPUP style.
  7. WS_CHILDWINDOW
  8. Same as the WS_CHILD style.
  9. WS_CLIPCHILDREN
  10. Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.
  11. WS_CLIPSIBLINGS
  12. 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.
  13. WS_DISABLED
  14. 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.
  15. WS_DLGFRAME
  16. 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.
  17. WS_GROUP
  18. 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.
  19. 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.
  20. WS_HSCROLL
  21. Creates a window that has a horizontal scroll bar.
  22. WS_ICONIC
  23. Creates a window that is initially minimized. Same as the WS_MINIMIZE style.
  24. WS_MAXIMIZE
  25. Creates a window that is initially maximized.
  26. WS_MAXIMIZEBOX
  27. 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.
  28. WS_MINIMIZE
  29. Creates a window that is initially minimized. Same as the WS_ICONIC style.
  30. WS_MINIMIZEBOX
  31. 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.
  32. WS_OVERLAPPED
  33. Creates an overlapped window. An overlapped window has a title bar and a border. Same as the WS_TILED style.
  34. WS_OVERLAPPEDWINDOW
  35. 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.
  36. WS_POPUP
  37. Creates a pop-up window. This style cannot be used with the WS_CHILD style.
  38. WS_POPUPWINDOW
  39. 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.
  40. WS_SIZEBOX
  41. Creates a window that has a sizing border. Same as the WS_THICKFRAME style.
  42. WS_SYSMENU
  43. Creates a window that has a window menu on its title bar. The WS_CAPTION style must also be specified.
  44. WS_TABSTOP
  45. 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.
  46. 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.
  47. WS_THICKFRAME
  48. Creates a window that has a sizing border. Same as the WS_SIZEBOX style.
  49. WS_TILED
  50. Creates an overlapped window. An overlapped window has a title bar and a border. Same as the WS_OVERLAPPED style.
  51. WS_TILEDWINDOW
  52. 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.
  53. WS_VISIBLE
  54. Creates a window that is initially visible.
  55. This style can be turned on and off by using ShowWindow or SetWindowPos.
  56. WS_VSCROLL
  57. Creates a window that has a vertical scroll bar.
时间: 2024-11-02 03:44:45

Directshow 通过 put_Owner 指定显示窗口后,自动刷新问题的相关文章

ASPX 关闭子窗口后自动更新父窗口

Response.Write("<script language:javascript>javascript:window.close();</script>");//关闭窗口后不更新父窗口 Response.Write("<script> window.opener.location= 父窗口.aspx ';window.close(); </script>");//关闭窗口后自动更新父窗口 ASPX 关闭子窗口后自

jekyll+livereload+chrome插件-更新文件后自动刷新

2014-08-27 本文不保证成功,window系统会出现各种问题,如若不成功,请直接用livereload的window版,解决,详细可以查看livereload下载对应版本操作,比较傻瓜式: 以下主要介绍的是命令行配置的方式: jekyll+livereload更新后自动刷新,老外的教程,先看看: http://dan.doezema.com/2014/01/setting-up-livereload-with-jekyll/ 1.安装guard-jekyll-plus 时会出错,依赖包版

Javascript实现页面加载完成后自动刷新一遍清除缓存文件

我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分的window对象的内容来改变当前window,自动改变window几乎不太可能控制window的加载次数,因为每次新window产生一切变量及对象内容都会清掉.这时候可以考虑是否可以通过获取页面跳转加载时原页面传来的信息不同而做判断来控制window是继续跳转还是停止跳转.这时,就可以用到wind

修改文件后浏览器自动刷新解决方案

现有编程工具的自动刷新解决方案 其实有很多工具可以做到文件一改变,浏览器自动刷新,其实这样体验也是最好的,可是由于一些原因,这些工具并不能解决所有工作场景的需求. 由于这不是本文的主要内容,只列出一些可以实现自动刷新的工具,没有进行详细展开,大家可以自行去研究下. 在Sublime下有一个插件叫做LiveStyle可以实现修改CSS后自动刷新,但是每一个CSS文件都要手动配置,不够智能.需要安装Chrome插件:Emmet LiveStyle. JetBrains公司的IDEA.WebStorm

JSP中自动刷新

以下内容引用自http://wiki.jikexueyuan.com/project/jsp/auto-refresh.html: 细想一个显示在线比赛分数.股市状态或当前交易额的网页.对于所有这种类型的网页,需要通过浏览器中的更新或者重新载入按钮定期的刷新网页. 通过提供一个在给定的间距后自动刷新网页的机制,可以使JSP更加容易运行. 刷新网页最简单的方法就是使用Request对象的setIntHeader()方法.下面是这个方法的符号描述: public void setIntHeader(

【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效

最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire Google Drive Files 让Google 云端硬碟共用连结在指定时间后自动失效,文中介绍的Expire Google Drive Files可以让Google  Docs云盘共享连接在指定时间后自动失效解决了指定时间内权限失效的问题. —————————————————————————

php while循环 指定显示内容 例如不想显示前10条和后10条

<?php //查询信息总的条数 $db_num = query_num("表","where 1=1"); //每页显示的条数 $page_size=200; //总条目数 $nums=$db_num; //每次显示的页数 $sub_pages=5; if(!$pageCurrent) $pageCurrent=1; $page_num=$pageCurrent-1; $page_num=$page_num*$page_size; $list_sql = m

WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。

原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/87966584 WPF默认的窗口,如果采用默认的标题与图标,运行状态下在任务栏中显示的图标就比较难看~ 如果要更改在任务栏的显示图标,需要设定窗口的Icon属性.这里给出一种方法. 方法一.前台指定? 1)添加图片到项目中 2)在窗口属性中设置icon 方法二.

Axure实现提示文本单击显示后自动消失的效果

方法/步骤 如图所示,框出的部分为提示文本(已经命名为tooltip),希望达到的效果是默认加载时不显示,点击帮助图标后显示,且2秒后自动消失.   首先在“属性面板”的交互中,选择“载入时”   在“载入时”用例编辑中,隐藏tooltip,上面的事件无需理会,是另外一个交互事件   再选择要单击的元件,事件选择“鼠标单击时”   先给tooltip增加第一个事件,逐渐显示.   通过“其他”-“等待”,修改等待时间,实现显示2s的效果.   继续选择“显示-隐藏”,这次可见性改成隐藏,如果动画