C++ 如何在Windows中在桌面上绘制文本?
如何在windows桌面上放置文本?我被告知GetDesktopWindow()是我需要的,但我需要一个例子。我假设您的最终目标是在桌面上显示某种状态信息 您必须执行以下任一操作:C++ 如何在Windows中在桌面上绘制文本?,c++,winapi,drawing,C++,Winapi,Drawing,如何在windows桌面上放置文本?我被告知GetDesktopWindow()是我需要的,但我需要一个例子。我假设您的最终目标是在桌面上显示某种状态信息 您必须执行以下任一操作: 将DLL插入资源管理器的进程中,并对桌面窗口(位于Progman窗口层次结构底部的SysListView32子类)进行子类化,以便直接在其上绘制文本 创建一个不可激活的窗口,使用PaintDesktop绘制其背景,并在其上绘制文本 第一个解决方案是最具侵入性的,而且很难编码,所以我不推荐它 第二种解决方案允许最大
- 将DLL插入资源管理器的进程中,并对桌面窗口(位于
窗口层次结构底部的Progman
子类)进行子类化,以便直接在其上绘制文本SysListView32
- 创建一个不可激活的窗口,使用
绘制其背景,并在其上绘制文本PaintDesktop
WS_EX_NOACTIVATE
。在底层系统上,您可以处理WM_MOUSEACTIVATE
消息并返回MA_NOACTIVATE
如果您需要通过使用分层窗口实现真正的透明度,则可以通过调用
PaintDesktop
来解决问题,但概念保持不变。我写了另一个答案,详细说明了如何使用GDI+正确地使用alpha创建分层窗口。为什么不在桌面墙纸图像文件中绘制文本
如果你不需要经常更新信息,如果你有一张壁纸图片,这个解决方案是可行的
您可以轻松地使用类加载墙纸图像,获取要绘制的设备上下文,然后保存新图像,最后将桌面墙纸更新为新图像。我没有尝试过,但我假设您可以执行以下操作:
-don如果您的目的是制作边栏之类的东西,那么您可能只想创建一个或多个边栏。这还允许您处理鼠标单击和其他正常输入源,如果您提供alpha通道信息,Windows将确保始终正确绘制窗口。如果您不希望窗口具有交互性,请使用Koro建议的适当样式(如WS_EX_NOACTIVATE)。为什么要这样做?windows中是否已经内置了一个通知系统,您可以使用它来代替向桌面窗口写入文本?提示:可能有。我想制作一个类似windows边栏的东西。主要是作为一种学习经验,但我认为它也会很有用……我已经想到了这一点,但数据必须经常更新。这会导致两次崩溃:一次是当Explorer.EXE无法调用您自己的过程时(它在您的过程中,而不是Explorer)。如果我们可以忽略这一点,当您尝试在Explorer的进程中调用原始WndProc时,它将崩溃,而不是您的进程。