C# 当窗体处于桌面级别时,如何更改不透明度

C# 当窗体处于桌面级别时,如何更改不透明度,c#,winforms,visual-studio-2012,C#,Winforms,Visual Studio 2012,我正在为自己编写一个工具,它将取代windows桌面。 将我的程序置于桌面级别的代码如下(C#): 因此,我无法将窗体的不透明度设置为100%以外的任何值(否则程序将无法启动) 由于我没有找到一种使单个控件半透明的好方法,我想问一下,是否有人知道如何制作整个表单或控件(例如GridViews和TextBoxes)不透明或使所有控件的背景透明。如果更换桌面,为什么要使窗体或特定控件透明,例如,你想在下面显示什么?你的确切意思是什么?不会启动?你设置其父窗口的子窗口?以及…你正在尝试设置不透明度的子

我正在为自己编写一个工具,它将取代windows桌面。 将我的程序置于桌面级别的代码如下(C#):

因此,我无法将窗体的不透明度设置为100%以外的任何值(否则程序将无法启动)


由于我没有找到一种使单个控件半透明的好方法,我想问一下,是否有人知道如何制作整个表单或控件(例如
GridView
s和
TextBox
es)不透明或使所有控件的背景透明。

如果更换桌面,为什么要使窗体或特定控件透明,例如,你想在下面显示什么?你的确切意思是什么?不会启动?你设置其父窗口的子窗口?以及…你正在尝试设置不透明度的子窗口吗?由于没有关于你的应用程序中到底发生了什么的回复,我将使用点击与未点击。尝试使用SetLayeredWindowAttributes函数,因为您正在进行非托管API调用……如果继续使用这种方法,您可能会永远陷入困境。在Winforms中,我们无法使用某些win32函数或提供的属性使子控件透明。我建议您在显示桌面时尝试连接,然后在桌面上显示您的表单,当然我们不使用
SetParent
,因此可以轻松更改表单的不透明度。更改不透明度属性会更改句柄属性。Winforms的一个副作用是必须销毁并重新创建窗口,以便它可以更改WS_EX_分层样式标志。因此,必须将此代码置于OnHandleCreated方法的重写中。
        IntPtr hwndf = this.Handle;
        IntPtr hwndParent = FindWindow("ProgMan", null);
        SetParent(hwndf, hwndParent);