如何在Windows桌面上绘制文本?

sow*_*was 3 c++ winapi drawing

我将如何在Windows桌面上放置文本?我被告知GetDesktopWindow()是我需要的,但我需要一个例子.

小智 9

我假设您的最终目标是在桌面上显示某种状态信息.

您将不得不这样做:

  • 将DLL注入Explorer的进程并子类化桌面窗口(窗口层次结构SysListView32底部Progman)以直接在其上绘制文本.

  • 创建一个不可激活的窗口,其背景使用PaintDesktop并在其上绘制文本.

第一种解决方案是最具侵入性的,而且很难编码,因此我不推荐它.

第二种解决方案允许最灵活.没有"无证件"或依赖于Explorer的特定实现,甚至只是将Explorer作为shell.

为了防止窗口在单击时被置于顶部,您可以WS_EX_NOACTIVATE在Windows 2000及更高版本上使用扩展窗口样式.在下层系统中,您可以处理WM_MOUSEACTIVATE消息并返回MA_NOACTIVATE.

PaintDesktop如果您通过使用分层窗口需要真正的透明度,您可以逃脱呼叫,但概念保持不变.我写了另一个回答,详细说明了如何使用GDI +正确地使用alpha进行分层窗口.