代码之家  ›  专栏  ›  技术社区  ›  Roman

如何知道MDI子窗体在视觉上发生了更改?

  •  0
  • Roman  · 技术社区  · 6 年前

    我有一个用C编写的MDI WinForms应用程序。通常只有一个MDI子窗体可见,其他所有窗体都在后台。例如,每秒钟都会有一个网页控件在动态变化(例如,每秒钟都会有一个网页控件在网页上显示数据)。

    当用户将鼠标悬停在主窗体的工具栏上或单击某个特殊按钮时,我想显示子窗体的小预览。我可以成功地使用PrintWindow函数 here 制作子MDI窗体的屏幕截图。这甚至适用于非活动子窗体。唯一的问题是,拍摄每个屏幕截图可能需要很长的时间(大约100-120毫秒),这可能是因为表单的复杂结构,所以如果我在想要显示预览之前就做了屏幕截图,那么这会造成明显的延迟,特别是当有很多子表单(例如10-15)时。

    我试图通过重写子窗体类的WndProc函数来实现这一点,并查找一些消息,如WM_gin或WM_SETREDRAW。但是,当我记录所有消息时,我既看不到WM_PAINT也看不到WM_SETREDRAW,即使表单处于活动状态(在前台),并且其上的web浏览器控件不断更新其页面。这些事件可能直接发送到窗体的控件,而不是发送到窗体本身。

    从MDI控件中有没有这样的通知方式?

    更新: 我找到了WinAPI GetUpdateRect

    0 回复  |  直到 6 年前
    推荐文章