2011-11-21 113 views
3

我需要在桌面上直接绘制滚动文字。我可以使用DC在所有窗口上绘制文本:= GetDC(0)。但我不想那样。绘图必须只在桌面上,而不是在所有打开的窗口上。我的文字需要在桌面上的图标下面!如何在桌面上绘制文字?

如何在Delphi中做到这一点?我猜想Windows 7具有新的API函数,可以更轻松地访问桌面窗口,因为它可以淡化壁纸。

+0

如果您不希望文字留在桌面上的图标下方,则带有渐变壁纸的窗口无关紧要。 –

+0

嗨塞尔特克。你能详细说明吗? – Ampere

+0

带有壁纸的窗口位于具有图标(SysListView32)的窗口下方,这就是我的意思。如果你为桌面(progman,workerw,shelldll_defview等)获取的DC以外的任何内容写入,则滚动文本将保留在桌面上的图标下。如David所说,在窗口上提供文本会更容易。 –

回答

8

这对于layered windows已经可能很长时间了。使用WS_EX_LAYEREDWS_EX_TRANSPARENT窗口状态。您需要确保窗口的z顺序将其置于所有其他顶级窗口之下。我链接的文章有许多代码示例可供您使用。


添加此答案后,您添加了一个进一步的要求,即将文本绘制在桌面上的图标下方。我怀疑这是不可能的分层窗口,因为分层窗口不能是子窗口。

+0

嗨。我没有完全阅读文档,但它说“提供了一种有效的方法来为顶级窗口添加透明度和半透明度”。我想在桌面上绘画,这样当我的应用程序没有运行时,我的文本也会停留在那里。例如,微软的Wallpaper Slideshow工具可以在两幅图像之间平滑过渡。即使工具没有运行,图像也会保留在那里。 – Ampere

+1

你可以使用分层窗口来实现你想要的。关键是'WS_EX_TRANSPARENT',它使窗口点击。 –

+0

但是我使用这种方法绘制的文本会在上面的图标之下。 – Ampere

2

我想在桌面上画图,所以当我的应用程序没有运行时,我的文本也停留在那里。

如果文本也应该在那里,如果你的应用程序没有运行,那么你唯一的选择是更改壁纸:找出桌面壁纸的图像是什么,将你的文本添加到该图像并保存为一个新的壁纸和使用那一个。

+0

我同意这一点。但是,是否可以更改壁纸而不将REFRESH消息发送到系统中的所有窗口。看来微软的Wallpaper SlideShow正在做这件事。 – Ampere