在 Windows 中:我想知道是否有可能(如果有,如何)用 C++ 制作一个直接在屏幕上显示图像/文本的程序,这意味着没有窗口;如果你在一些例子之后仍然对我感到困惑:Rocketdock 和 Rainmeter。
1 回答
你可以在不使用 Qt 或任何其他框架的情况下做到这一点。只有 Win32 API 可以帮助您做到这一点,并且在内部,每个框架都会调用这些 API,因此这些框架中的任何一个都没有魔法
首先,要明白没有窗口就不能显示任何图像或文本。每个程序都使用某种窗口来显示文本或图像。您可以使用 Windows SDK 附带的 Spy++ 进行验证。单击十字线标志,单击您认为没有任何窗口显示的图像或文本。Spy++ 会显示它所在的窗口。
现在如何显示似乎不包含在任何窗口中的图像或文本。那么你必须执行某些步骤。
创建一个没有标题栏、调整边框大小、控制框、最小化、最大化或关闭按钮的窗口。使用CreateWindowEx()并查看各种窗口样式WS_EX_XXX,WS_XXX以获得所需的窗口样式。
一旦窗口在那里,您需要切割窗口。很像一个饼干刀。为此,您需要定义一个区域。该区域称为区域,您可以使用许多函数来定义它,例如CreateEllipticRgn()、CreatePolygonRgn()、CreateRectRgn()、CreateRoundRectRgn()等。所有这些函数都返回一个 HRGN,它是该区域的句柄。椭圆或矩形区域可以作为起始区域。
现在是最后一部分。您必须像那个特定区域一样切割窗口。使用SetWindowRgn()函数,该函数需要窗口句柄和该区域 ( HRGN ) 的句柄。此功能会将窗口切割成您想要的形状。
现在为图像或文本。在窗口内绘制图像或文本。我想你一定是根据你的形象剪掉了窗户,你只需要给窗户一张脸。所以只需在WM_ERRASE 背景或WM_PAINT消息上绘制图像
使用SetWindowPos()将窗口移动到您希望在屏幕上的位置。如果您在 CreateWindowEx() 中使用了正确的参数,则无需执行此步骤
您可以使用SetWindowLong()函数设置任何其他样式的窗口。
恭喜,您无需使用任何窗口即可显示图像;)