桌面上的透明表格

时间:2020-03-06 14:31:50  来源:igfitidea点击:

我想创建一个带有多个窗口的标题,这些窗口在某些文本上都是透明的。

棘手的部分是使这些表单位于桌面顶部,但位于桌面图标下方。这可能吗?

解决方案

仅使窗口透明非常简单:

this.BackColor = Color.Fuchsia;
this.TransparencyKey = Color.Fuchsia;

我们可以执行以下操作以使其与桌面或者窗口下的其他任何对象进行交互:

public const int WM_NCHITTEST = 0x84;
public const int HTTRANSPARENT = -1;

protected override void WndProc(ref Message message)
{
    if ( message.Msg == (int)WM_NCHITTEST )
    {
        message.Result = (IntPtr)HTTRANSPARENT;
    }
    else
    {
        base.WndProc( ref message );
    }
}

感谢杰夫(Jeff)的提示。它仍然不是我想要的。我实际上希望窗口看起来像是桌面的一部分,以便图标可以位于表单的顶部。

也许有另一种方法可以做到这一点。我实际上可以直接在桌面上绘制文本和图形吗?

Jeff Hillman所描述的上述方法可以有效地使窗口透明,这应该使我们能够使它看起来像是桌面的一部分(我们提到的是目标)。

我们可能会遇到的一个问题(我最近也遇到过)是在窗口中设置了任何抗锯齿标志。具体来说,使用DrawText可以将设置了抗锯齿标志的任何文本呈现为背景不是透明的。最终结果是我们得到的文本周围带有轻微的彩色边框。我敢肯定,即使我没有尝试过,这对其他任何事情也都适用。

是否有解决该问题的想法?