2011-11-21 79 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