2010-01-09 85 views
0

长标题,但简单的问题。C#在桌面上创建一个粘滞窗口,具有transperancy

我试图让一个窗口粘到destop(或脚),我可以做到这一点是这样的:

[DllImport("User32.dll")] 
    static extern IntPtr FindWindow(String lpClassName, String lpWindowName); 
    [DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 
    [DllImport("user32.dll")] 
    static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

     IntPtr pWnd = FindWindow("Progman", null); 
     pWnd = FindWindowEx(pWnd, IntPtr.Zero, "SHELLDLL_DefVIew", null); 
     pWnd = FindWindowEx(pWnd, IntPtr.Zero, "SysListView32", null); 
     IntPtr tWnd = this.Handle; 
     SetParent(tWnd, pWnd); 

这工作得很好,但我不能改变transperancy或opacitiy。

我可以使用CreateWindowEx创建一个很好的透明窗口分层,但是这种方法不再适用于将其固定到桌面上!

任何人都知道如何做到这一点?

谢谢!

+1

为什么不这种方法“工作了”? – Thomas 2010-01-09 10:44:04

回答

1

只有顶层窗口可以创建为分层。用你的方法,你正在为桌面窗口创建一个子窗口,因此它不能分层。

如果试图通过将某个窗口“粘住”/“固定”到桌面来解释您的意思可能会更好。我假设你想把窗口设置在桌面上的特定位置,并始终保持在那里,但是我必须有更多的东西丢失。否则,为什么不把窗口定位在屏幕上的特定坐标不适合你?

+0

我希望我的表单能够“粘”到deskopt,所以如果我最小化所有内容,它仍然可见,它必须是桌面屏幕的一部分,非常类似于小工具边栏!这对于发布的代码来说工作正常,但transperancy不会以这种方式工作,所以我正在寻找一个解决方案,可以同时做到这一点! :) – YesMan85 2010-01-09 13:53:16