[英]How to draw text on the desktop in Windows?
我將如何在Windows桌面上放置文本? 我被告知GetDesktopWindow()是我需要的,但我需要一個例子。
我假設您的最終目標是在桌面上顯示某種狀態信息。
您將不得不這樣做:
注入DLL資源管理器中的進程和子類的桌面窗口( SysListView32
在底部Progman
窗口的層次)繪制直接在文本到它。
創建一個PaintDesktop
窗口,其背景使用PaintDesktop
繪制並在其上繪制文本。
第一種解決方案是最具侵入性的,而且很難編碼,因此我不推薦它。
第二種解決方案允許最靈活。 沒有“未記錄”或依賴於Explorer的特定實現,甚至只是將Explorer作為shell。
為了防止窗口在單擊時被置於頂部,您可以在Windows 2000及更高版本上使用擴展窗口樣式WS_EX_NOACTIVATE
。 在下層系統中,您可以處理WM_MOUSEACTIVATE
消息並返回MA_NOACTIVATE
。
如果通過使用分層窗口需要真正的透明度,您可以使用PaintDesktop
調用,但概念保持不變。 我寫了另一個回答,詳細說明了如何使用GDI +正確地使用alpha進行分層窗口。
為什么不在桌面壁紙圖像文件中繪制文字?
如果您不必經常更新信息並且有壁紙圖像,則此解決方案是可行的。
可以輕松使用CImage類加載壁紙圖像, CImage :: GetDC()獲取要繪制的設備上下文,然后保存新圖像,最后將桌面壁紙更新為新圖像。
我沒試過,但我認為你可以做到以下幾點:
不是100%肯定它會工作,但似乎應該這樣,因為這是子窗口的正常方式。
-don
如果您的目的是生成側邊欄之類的東西,您可能只想創建一個或多個分層窗口 。 這也將允許您處理鼠標點擊和其他常規輸入源,如果您提供Alpha通道信息,Windows將確保您的窗口始終正確繪制。 如果您不希望窗口是交互式的,請使用適合的樣式(例如WS_EX_NOACTIVATE),如Koro建議的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.