Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 桌面上的透明窗体_C#_Winforms_Window_Desktop - Fatal编程技术网

C# 桌面上的透明窗体

C# 桌面上的透明窗体,c#,winforms,window,desktop,C#,Winforms,Window,Desktop,我想创建一个具有多个窗口的c应用程序,这些窗口都是透明的,上面有一些文本 棘手的部分是使这些表单位于桌面的顶部,但位于桌面图标的下方。这是可能的吗?仅仅使窗口透明是非常简单的: this.BackColor = Color.Fuchsia; this.TransparencyKey = Color.Fuchsia; 您可以这样做,这样您仍然可以与桌面或窗口下的任何其他内容进行交互: public const int WM_NCHITTEST = 0x84; public const int H

我想创建一个具有多个窗口的c应用程序,这些窗口都是透明的,上面有一些文本


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

仅仅使窗口透明是非常简单的:

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

仅使窗口透明非常简单:

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 Hillman)所述的方法可以有效地使窗口透明,这将使您能够将其显示为您提到的桌面的一部分

您可能会遇到一个问题,我最近也遇到过这个问题,即在窗口中设置了任何抗锯齿标志。具体地说,使用DrawText,任何使用抗锯齿标志集渲染的文本都会渲染为背景不透明。最终的结果是,您得到的文本周围有一个轻微的彩色边框。我相信这也适用于其他任何事情,尽管我还没有尝试过


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

杰夫·希尔曼(Jeff Hillman)所述的上述方法可以有效地使窗口透明化,这将使您能够将其显示为桌面的一部分,而您提到的正是您的目标

您可能会遇到一个问题,我最近也遇到过这个问题,即在窗口中设置了任何抗锯齿标志。具体地说,使用DrawText,任何使用抗锯齿标志集渲染的文本都会渲染为背景不透明。最终的结果是,您得到的文本周围有一个轻微的彩色边框。我相信这也适用于其他任何事情,尽管我还没有尝试过

有没有关于如何解决这个问题的想法