c++ - 如何在 Windows 的桌面上绘制文字?

标签 c++ winapi drawing

我将如何在 Windows 桌面上放置文本?有人告诉我 GetDesktopWindow() 是我需要的,但我需要一个示例。

最佳答案

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

您必须执行以下任一操作:

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

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

第一个解决方案是最具侵入性的,并且很难编写代码,所以我不推荐它。

第二种解决方案具有最大的灵 active 。没有“未记录”或依赖于 Explorer 的特定实现,甚至没有将 Explorer 作为外壳。

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

如果您需要使用分层窗口实现真正的透明度,您可以使用 PaintDesktop 调用,但概念保持不变。我写了另一个答案,详细说明了如何使用 GDI+ 正确地使用 alpha 进行分层窗口。

关于c++ - 如何在 Windows 的桌面上绘制文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397389/

相关文章:

.net - C++\CLI 中的 native winAPI

c++ - 编译器是否优化内联函数的局部变量

c++ - 在 C++ 中需要什么才能使我们始终使用引用而不使用指针?

c++ - WDK:将 PVOID 转换为 PWCHAR(C 到 C++ 转换)

c++ - 检查给定用户配置文件在 C++ 中是否处于事件状态或已删除的最佳方法是什么?

c# - 将 int 转换为 System.Drawing.Brushes.SomeColor?

ios - 绘图应用程序性能

performance - 加快调整网格列大小的过程

c++ - 尝试将字符串的元素与循环和索引进行比较,但索引不会递增

c++ - 在 C++AMP 的 parallel_for_each 中使用用户指定的函数