1

我正在尝试捕获隐藏在我的应用程序后面的窗口。我正在使用 Windows 7 和 VC++。我已经尝试过printwindow()绘制隐藏窗口的非客户端和客户端区域的功能,但是在设备上下文中捕获的窗口不显示桌面合成效果(航空效果)。相反,它显示带有 Windows 7 基本主题的捕获窗口。

我还尝试GetWindowDC()检索隐藏窗口的 DC,然后Bitblt()将其存储到内存 DC,但捕获的窗口未正确显示非客户区(标题、关闭按钮、最小化按钮等)。

有人遇到过这个问题吗?请帮忙。

4

1 回答 1

0

点击下面的链接。它通向一个 MSDN 站点,该站点列出了从 Windows 95 到 Windows 8(从 Microsoft 启动 Windows 到现在)的所有历史记录中的所有现有 Windows 功能。它显示了第一个窗口的旧窗口功能和为新窗口添加的新窗口功能。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff468919(v=vs.85).aspx

无论如何都要关注这个网站。您将看到每个函数的名称作为链接。单击您感兴趣的任何一个。那里的每个链接都指向另一个 MSDN 站点,该站点解释了您在使用该功能之前必须了解的所有基础知识,您想了解更多信息。该函数的作用、用途、所有参数以及如何使用每个参数、所有标志、所有参数类型、返回值以及最后的备注部分,这些部分提供了更多信息,有时还会提供有关所选函数的提示。

当然,您不必阅读所有内容。在列表中仅查找满足您需求的必要功能。将解决您的问题并回答您发布的问题的功能。

顺便说一句,我阅读了您的帖子,并且我认为我在列表中找到了可以完成您想做的事情的必要功能,我将在下面列出它们,并用一句话说明每个功能都可以满足您的需要:

AnimateWindow - 使您能够在显示或隐藏窗口时产生特殊效果。有四种类型的动画:滚动、滑动、折叠或展开以及 alpha 混合淡入淡出。

FlashWindow - 使指定窗口闪烁一次。它不会改变窗口的活动状态。

FlashWindowEx - 使指定窗口闪烁指定次数。它不会改变窗口的活动状态。

使用这些功能来实现您想要的航空效果

SetWindowPos - 更改子窗口、弹出窗口或顶级窗口的大小、位置和 Z 顺序。这些窗口根据它们在屏幕上的外观进行排序。最顶层的窗口获得最高排名,并且是 Z 顺序中的第一个窗口。

使用此功能可在顶部(在所有其他窗口上方)和您面前的屏幕上显示隐藏的窗口。操作系统会自动绘制这些窗口的非客户区和客户区,而无需自己使用任何 gdi、draw 和paint 函数。

如果您希望这些窗口返回到它们之前的状态(它们被隐藏的位置),则使用 GetWindowPlacement 函数保存它们的状态,然后调用 SetWindowPlacement 将它们带回它们的隐藏状态。您可以尝试 GetWindowRect 和 SetWindowPos 来实现相同的目标。

我还认为您会对 GetWindowTheme 和 SetWindowTheme 函数以及所有绘图主题函数(BackgroundEx、Edge、Icon、Text、TextEx)感兴趣。

还有更多的主题功能。在 msdn 和 Web 上的其他站点中查找。

于 2014-08-26T01:04:01.630 回答