我有一个用C编写的MDI WinForms应用程序。通常只有一个MDI子窗体可见,其他所有窗体都在后台。例如,每秒钟都会有一个网页控件在动态变化(例如,每秒钟都会有一个网页控件在网页上显示数据)。
当用户将鼠标悬停在主窗体的工具栏上或单击某个特殊按钮时,我想显示子窗体的小预览。我可以成功地使用PrintWindow函数
here
制作子MDI窗体的屏幕截图。这甚至适用于非活动子窗体。唯一的问题是,拍摄每个屏幕截图可能需要很长的时间(大约100-120毫秒),这可能是因为表单的复杂结构,所以如果我在想要显示预览之前就做了屏幕截图,那么这会造成明显的延迟,特别是当有很多子表单(例如10-15)时。
我试图通过重写子窗体类的WndProc函数来实现这一点,并查找一些消息,如WM_gin或WM_SETREDRAW。但是,当我记录所有消息时,我既看不到WM_PAINT也看不到WM_SETREDRAW,即使表单处于活动状态(在前台),并且其上的web浏览器控件不断更新其页面。这些事件可能直接发送到窗体的控件,而不是发送到窗体本身。
从MDI控件中有没有这样的通知方式?
更新:
我找到了WinAPI
GetUpdateRect