0

为了截取特定窗口的屏幕截图,我需要在该窗口后面放置一个白色 TForm。我可以使用什么 Windows API 来更改窗口的 z 顺序并将其正确放置?

4

3 回答 3

4

试试这个SetWindowPos()功能。

于 2009-10-07T08:00:34.123 回答
1

在 Delphi 上,您可以使用SendToBack方法.Top.Left属性。

form1.Top := ...;
form1.Left := ...;
form1.SendToBack;

程序 SendToBack;

描述

使用 SendToBack 更改重叠控件或表单的顺序。

控件相互堆叠的顺序(也称为 Z 顺序)取决于控件在窗体上的放置顺序。例如,如果您将标签和图像放在表单上,​​使一个在另一个之上,那么最先放置在表单上的那个将成为底部的那个。因为标签和图像都是非窗口控件,所以它们会像您期望的那样“堆叠”。调用顶部对象的 SendToBack 方法以将其移动到另一个对象下方。

两个窗口控件的堆叠顺序与两个非窗口控件的堆叠顺序相同。例如,如果您在表单上放置了备忘录,然后在其顶部放置了一个复选框,则该复选框仍位于顶部。为复选框调用 SendToBack 会使备忘录显示在顶部。

窗口和非窗口控件的堆叠顺序不能混合。例如,如果您在窗体上放置一个备忘录(一个窗口控件),然后在其顶部放置一个标签(一个非窗口控件),则该标签会在备忘录后面消失。窗口控件总是堆叠在非窗口控件之上。在这个例子中,调用备忘录的 SendToBack 方法什么都不做,标签留在备忘录后面。

如果在执行 SendToBack 方法时控件具有输入焦点,则它会失去输入焦点。

(编辑:WinSnap是一个非常好的截屏工具)

于 2009-10-07T08:13:40.513 回答
0

如果您可以在前面获得所需窗口的句柄,那么我会假设:伪代码:

MyAppWindow.BringToFront

其次是

TargetWindow.BringToFront

应该有预期的效果吧?

于 2009-10-07T19:16:14.987 回答