使用航空效果捕获隐藏窗口

时间:2013-05-21 06:49:45

标签: windows visual-c++ gdi+

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

我还尝试用GetWindowDC()来检索隐藏窗口的DC,然后Bitblt()将其转换为内存DC,但捕获的窗口不显示非客户区域(标题,关闭按钮,最小化按钮等)。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

顺便说一下,我读了你的帖子,我我在列表中找到了你想做的事情的必要功能,我会在下面列出它们,然后在一个中说出来判断每个人为你所需要做的事情:

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

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

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

使用这些功能来实现您想要的 aero effects

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

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

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

我也认为你会对GetWindowTheme和SetWindowTheme函数以及所有绘制主题函数(BackgroundEx,Edge,Icon,Text,TextEx)感兴趣。

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