在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

  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.

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

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

    Response.Write("<script language:javascript>javascript:window.close();</script>&quo ...

  2. 黄聪:PHP如何实现延迟一定时间后自动刷新当前页面、自动跳转header("refresh:1;url={$url}");

    //1秒后自动跳转 header("refresh:1;url={$url}"); exit; //1秒后自动刷新当前页面header("refresh:1;" ...

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

    我们有些时候在加载页面时,会出现缓存文件对当前文件的表现效果有干扰,如有些缓存的样式文件会是页面效果发生改变,这时我们希望页面在加载时能自动刷新一遍清楚缓存文件. 但是由于跳转页面肯定会用到BOM部分 ...

  4. BrowserSync 热更新的使用(保存后自动刷新)

    BrowserSync使用的优点,BrowserSync监听条件中的文件,发现更新会立刻刷新浏览器,就像 vue中的热更新一样,解放F5实现自动更新,提高开发效率, 解决了使用双屏幕时来回切换的烦恼! ...

  5. 问题解决——ShowWindow不显示窗口

    配合任务栏通知区域. //MFC对话框程序 void CXXXDlg::OnShowHideUi() { // TODO: 在此添加命令处理程序代码 m_bShown=!m_bShown; ShowW ...

  6. gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...

  7. JAVA-JSP内置对象之response对象实现页面自动刷新

    相关资料:<21天学通Java Web开发> response对象 实现页面自动刷新1.可以通过response对象的addIntHeader()方法添加一个标题为Refrsh的标头,并指 ...

  8. JSP中自动刷新

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/auto-refresh.html: 细想一个显示在线比赛分数.股市状态或当前交易额的网页.对于所有这种类 ...

  9. nodejs里的express自动刷新高级篇【转载】

    搬运自[简书:http://www.jianshu.com/p/2f923c8782c8]亲测可用哦! 最近在使用express框架及mongodb,由于前端和后端代码修改后都需要实现自动刷新功能,刚 ...

随机推荐

  1. BootStrap学习2 typeahead

    首先看看这些 http://www.wrapcode.com/bootstrap/typeahead-json-objects/ http://stackoverflow.com/questions/ ...

  2. c++中的成员选择符

    c++中支持仅能指向类成员的指针,对这种类型的指针进行数据的提取操作时,可使用如下两种类型的操作符:成员对象选择操作符.* 和 成员指针选择操作符->* 例一: #include <ios ...

  3. JAVA面试中的几个重要基础问题

    1.java是否会出现内存溢出?如何解决? 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存.为了解决Java中内存溢出问题,我们首先必 ...

  4. ORACLE中date类型字段的处理

    (1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98' 在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月 ...

  5. FastReport配置打印预览button_C++

    如需转载请标明出处:http://blog.csdn.net/itas109 FastReport採用C++方式.配置打印预览选项 //打印预览 //配置打印预览选项 pReport->Prev ...

  6. js中new构造函数的研究

    <javascript高级编程>里对new操作符的解释: new操作符会让构造函数产生如下变化: 1.       创建一个新对象: 2.       将构造函数的作用域赋给新对象(因此t ...

  7. Thread interrupt方法解析

    初步理解 我们在看一些多线程代码的时候,有的时候会碰到使用interrupt()方法的时候.从字面的意思来理解,应该就是中断当前正在执行的线程.那么,对于一个我们设计的普通线程来说,如果我们在主线程里 ...

  8. oracle累计求和

    //将当前行某列的值与前面所有行的此列值相加,即累计求和: //方法一: with t as(      select 1 val from dual union all      select 3 ...

  9. Go与Docker的几本书的作者

    http://thenewstack.io/ebookseries/http://thenewstack.io/building-a-web-server-in-go/

  10. SpringBoot接口服务处理Whitelabel Error Page(转)

    To switch it off you can set server.error.whitelabel.enabled=false http://stackoverflow.com/question ...