在屏幕上显示内容但没有窗口的程序

时间:2013-07-25 04:44:18

标签: c++ windows

在windows中:我想知道是否有可能(如果是这样,如何)在C ++中制作一个直接在屏幕上显示图像/文本的程序,这意味着没有窗口;如果你仍然对我之后的事情感到困惑,那就是:Rocketdock和Rainmeter。

1 个答案:

答案 0 :(得分:1)

你可以在不使用Qt或任何其他框架的情况下做到这一点。只需Win32 API可以帮助您在内部执行此操作,每个框架都会调用这些API,因此在这些框架中没有任何魔力

首先,要了解没有窗口就不能显示图像或文本。每个程序都使用某种窗口来显示文本或图像。您可以使用Windows SDK附带的Spy ++来验证它。单击十字线标志,单击您认为没有任何窗口显示的图像或文本。 Spy ++将显示它所包含的窗口。

现在如何显示似乎未包含在任何窗口中的图像或文本。那么你必须执行某些步骤。

  1. 创建一个没有标题栏,调整边框大小,控制框,最小化,最大化或关闭按钮的窗口。使用 CreateWindowEx(),查看所需窗口样式的各种窗口样式 WS_EX_XXX WS_XXX

  2. 窗口到达后,您需要剪切窗口。就像饼干切割器一样。为此你需要定义一个区域。此区域称为区域,您可以使用许多功能定义它,例如 CreateEllipticRgn() CreatePolygonRgn() CreateRectRgn() CreateRoundRectRgn()等所有这些函数都返回一个HRGN,它是该区域的句柄。椭圆或矩形区域可以作为起点。

  3. 现在是最后一部分。你必须像那个特定区域一样切割窗口。使用 SetWindowRgn()功能,该功能需要窗口的句柄和该区域的句柄( HRGN )。此功能将窗口切割成您想要的形状。

  4. 现在是图片或文字。在窗口内绘制图像或文本。我假设你必须根据你的形象切割窗户,你只需要给窗户一张脸。所以只需在 WM_ERRASE背景 WM_PAINT 消息

  5. 上绘制图像
  6. 使用 SetWindowPos()将窗口移动到屏幕上您想要的位置。如果您在CreateWindowEx()中使用了正确的参数,则无需执行此步骤

  7. 您可以使用 SetWindowLong()功能设置任何其他窗口样式。

  8. 恭喜,您无需使用任何窗口即可显示图像;)