我如何在Windows桌面上放置文字?我被告知GetDesktopWindow()是我需要的,但我需要一个例子。
答案 0 :(得分:9)
我假设您的最终目标是在桌面上显示某种状态信息。
你必须这样做:
将DLL注入资源管理器的进程并子类化桌面窗口(SysListView32
窗口层次结构底部的Progman
),直接在其上绘制文本。
创建一个不可激活的窗口,其背景使用PaintDesktop
绘制,并在其上绘制文字。
第一种解决方案是最具侵入性的,而且很难编码,所以我不推荐它。
第二种解决方案允许最大的灵活性。没有“无证件”或依赖于Explorer的特定实现,甚至只是将Explorer作为shell。
为了防止窗口在单击时被置于顶部,您可以在Windows 2000及更高版本上使用扩展窗口样式WS_EX_NOACTIVATE
。在下层系统中,您可以处理WM_MOUSEACTIVATE
消息并返回MA_NOACTIVATE
。
如果您通过使用分层窗口需要真正的透明度,则可以使用PaintDesktop
调用,但概念保持不变。我写了另一个回答,详细说明了如何使用GDI +正确地使用alpha进行分层窗口。
答案 1 :(得分:1)
为什么不在桌面壁纸图像文件中绘制文字?
如果您不必经常更新信息并且有壁纸图像,则此解决方案是可行的。
可以轻松使用CImage类加载壁纸图像,CImage::GetDC()以获取要绘制的设备上下文,然后保存新图像,最后将桌面壁纸更新为新图像。
答案 2 :(得分:0)
我没试过,但我认为你可以做到以下几点:
不是100%确定它会起作用,但似乎应该这样,因为这是子窗口的常规方法。
-don
答案 3 :(得分:0)
如果您的目的是生成补充工具栏,您可能只想创建一个或多个layered windows。这也将允许您处理鼠标点击和其他常规输入源,如果您提供Alpha通道信息,Windows将确保您的窗口始终正确绘制。如果您不希望窗口是交互式的,请使用适合的样式(例如WS_EX_NOACTIVATE),如Koro建议的那样。