我需要在桌面上直接绘制滚动文字。我可以使用DC在所有窗口上绘制文本:= GetDC(0)。但我不想那样。绘图必须只在桌面上,而不是在所有打开的窗口上。我的文字需要在桌面上的图标下面!如何在桌面上绘制文字?
如何在Delphi中做到这一点?我猜想Windows 7具有新的API函数,可以更轻松地访问桌面窗口,因为它可以淡化壁纸。
我需要在桌面上直接绘制滚动文字。我可以使用DC在所有窗口上绘制文本:= GetDC(0)。但我不想那样。绘图必须只在桌面上,而不是在所有打开的窗口上。我的文字需要在桌面上的图标下面!如何在桌面上绘制文字?
如何在Delphi中做到这一点?我猜想Windows 7具有新的API函数,可以更轻松地访问桌面窗口,因为它可以淡化壁纸。
这对于layered windows已经可能很长时间了。使用WS_EX_LAYERED
和WS_EX_TRANSPARENT
窗口状态。您需要确保窗口的z顺序将其置于所有其他顶级窗口之下。我链接的文章有许多代码示例可供您使用。
添加此答案后,您添加了一个进一步的要求,即将文本绘制在桌面上的图标下方。我怀疑这是不可能的分层窗口,因为分层窗口不能是子窗口。
我想在桌面上画图,所以当我的应用程序没有运行时,我的文本也停留在那里。
如果文本也应该在那里,如果你的应用程序没有运行,那么你唯一的选择是更改壁纸:找出桌面壁纸的图像是什么,将你的文本添加到该图像并保存为一个新的壁纸和使用那一个。
我同意这一点。但是,是否可以更改壁纸而不将REFRESH消息发送到系统中的所有窗口。看来微软的Wallpaper SlideShow正在做这件事。 – Ampere
如果您不希望文字留在桌面上的图标下方,则带有渐变壁纸的窗口无关紧要。 –
嗨塞尔特克。你能详细说明吗? – Ampere
带有壁纸的窗口位于具有图标(SysListView32)的窗口下方,这就是我的意思。如果你为桌面(progman,workerw,shelldll_defview等)获取的DC以外的任何内容写入,则滚动文本将保留在桌面上的图标下。如David所说,在窗口上提供文本会更容易。 –