在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. 使用Protel99 SE 拼板的详细图解(新加队列粘贴方法)

    很多网友跟我沟通,提到我上次博文中的protel99se中做拼板图解过于简略,应大家的有求,重新修改了操作图示. 首先打开PCB文档.如图所示:电路板的原点并没有在边上,为了操作方便和规范,先把有点设 ...

  2. ALV列、行、单元格颜色设置

    )颜色含义 :海蓝:2:浅清:3:黄色:4:浅蓝:5:青色:6:红色:7:橙色. (1)首位为主颜色: (2)次位为辅助颜色: (3)末位为0时,表示首位数字表为表格的底色: 末位为1时,则表示以1为 ...

  3. ThinkPHP 3.1.2 模板中的变量

    一.变量输出 (重点) 1.标量输出 2.数组输出 {$name[1]} {$name['k2']} {$name.k1} 3.对象输出 {$name:k} {$name->k} 二.系统变量 ...

  4. SPOJ1811最长公共子串问题(后缀自动机)

    题目:http://www.spoj.com/problems/LCS/ 题意:给两个串A和B,求这两个串的最长公共子串. 分析:其实本题用后缀数组的DC3已经能很好的解决,这里我们来说说利用后缀自动 ...

  5. android 关于LCD背光调节渐变过程引起背光闪烁问题

    如果背光渐变过程会引起背光闪烁,可以采取以下任意一种方法修改:   方法1.减少调节级别时间 http://blog.csdn.net/sergeycao   默认的设计在关闭背光时会有灭屏动画,就是 ...

  6. [Leetcode]-containsNearbyDuplicate

    //题目: //给定一个整数数组与一个整数k,当且存在两个不同的下标i和j满足nums[i] = nums[j]而且| i - j | <= k时返回true.否则返回false. #inclu ...

  7. if语句之猜拳

    用计算机来生成随机数: Random rand = new Random();//做一个随机生成器,Random();后面的括号里面可以放一个随机生成器种子,这个种子只能为整数(int)int n = ...

  8. iOS开发 点击跳转到App Store 或者 点击按钮去评价

    //跳转到应用页面 NSString *str = [NSString stringWithFormat:@"http://itunes.apple.com/us/app/id%d" ...

  9. 优雅的python

    在知乎上看到的问题--python有哪些优雅的代码实现. 下面的代码大概也算不上优雅. 一下代码在python3中实现 更多内容可见:http://book.pythontips.com/en/lat ...

  10. POJ 1458 Common Subsequence(LCS最长公共子序列)

    POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...