桌面上的透明表格

时间:2008-09-22 09:01:42

标签: c# winforms window desktop

我想创建一个带有多个窗口的c#应用程序,这些窗口都是透明的,并且有一些文本。

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

3 个答案:

答案 0 :(得分:4)

让窗口变得透明是非常直接的:

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 );
    }
}

答案 1 :(得分:0)

感谢杰夫提示。它仍然不是我想要的。我有效地希望窗口看起来好像它是桌面的一部分,所以图标可以放在我的表格之上。

也许有不同的方法来做到这一点。我可以直接在桌面上绘制文本和图形吗?

答案 2 :(得分:0)

Jeff Hillman上面描述的方法可以有效地使窗口透明,这样就可以让它看起来好像它是桌面的一部分(你提到的是你的目标。

您可能遇到的一个问题(我刚刚遇到的问题)是在设置了任何抗锯齿标志的情况下绘制到窗口。具体来说,使用DrawText,任何使用抗锯齿标记设置渲染的文本都会呈现为背景不透明。最终结果是你得到的文字周围有一个浅色的边框。我相信这也适用于其他任何事情,虽然我没有尝试过。

对于如何解决这个问题有什么想法吗?