我需要在桌面上直接繪製滾動文字。我可以使用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所說,在窗口上提供文本會更容易。 –