软件的界面(窗体)被嵌入到桌面里,和整个桌面图片融为一体,看起来就和桌面图片的一部分
不知道如何实现的?甚至不知道是不是c#实现的,我猜想应该是.net的技术
有知道的高人麻烦指点一下,最好能有源代码看
多谢了!

解决方案 »

  1.   

    利用不规则窗体 再加点WIN API
      

  2.   

    在以前版本的Visual Basic或Visual C++中,创建不规则窗体和控件是一件很复杂的事,不仅需要调用大量API函数而且工作量也不小。不过,现在在Visual C#下,情况就完全不同了。运用Windows Forms你就可以很轻易地创建出一个不规则的窗体以及窗体上的控件。一个具有不规则窗体和控件的应用程序肯定会更吸引广大的用户,微软的Windows Media Player 7就显示出这一点。作为程序员,您一定想在自己的程序中运用这点技术吧。 程序的窗体和控件都可以以非传统的方式被创建。本文就向大家展示如何在应用程序中创建不规则窗体,以及如何在窗体上创建各式各样的自定义形状的控件。 注:创建不规则窗体和控件这个过程包含了大量的图形编程工作,所以不同的计算机因内存和显卡的不同可能会导致最终的效果有所不同。因此,在发布你的应用程序前,务必在各种不同类型的计算机上做好测试工作。 实现方法首先,创建一个位图文件作为程序的窗体。位图可以是任意形状的,但是位图文件区域一定要足够大,这样才能包含窗体上的所有控件。然后,你可以通过设置一些属性使该图成为程序的窗体。 把程序中的标题栏去掉,否则整个界面将显得很不协调。当然你去掉了标题栏也就去掉了它的最大化、最小化、关闭、移动窗体等功能。为了使程序仍然具有这些功能,我们需在程序中添加一些代码,这样用户就仍然可以像以前一样和程序进行交互。 因此,你需要完成如下工作: 1.创建一个作为窗体的位图文件。 2.创建一个Windows应用程序,用上述位图文件作为程序的窗体同时去掉其标题栏。 3.添加原标题栏具有的功能所需的代码。 具体步骤下面我就具体向大家介绍如何创建不规则窗体。 创建一个具有不规则形状的位图文件 1.用任何画图程序就可以创建不规则形状的位图,你可以使用最容易也是最方便的画图程序。
      

  3.   

    2.用一种颜色画出一个不规则的区域作为程序的窗体,并用另一种颜色画出该位图的背景。(你要使该不规则区域足够大。) 3.保存位图文件。 下面就是一个例子: 在VS.net中创建一个新的工程 首先,设置窗体的背景从而建立窗体形状。 1.在窗体设计器中选中窗体使之获得焦点。 2.在属性对话框中进行如下设置: ● 将FormBorderStyle属性设置为None。该属性去掉了程序的标题栏,同时也除去了标题栏的功能,不过我在后面还会向大家介绍如何添加代码以恢复这些功能的。 ● 将BackgroundImage属性设置为你创建的位图文件。你不必在工程中添加该文件,因为你一旦指定了该文件,它就会自动被添加到工程中。 ● 将TransparencyKey属性设置为位图文件的背景颜色值(在本例中是蓝色)。该属性使得位图的背景即上图中的蓝色部分不可见,从而窗体就呈现出一个不规则的椭圆形。 3. 保存工程。按Ctrl+F5可以运行此程序。(注:因为没有标题栏,所以你可以通过Alt+F4来关闭程序) 将FormBorderStyle属性设置为None后,程序的标题栏就被去掉了。这样,为了获得原来标题栏的功能,我们必须手动添加代码。下面我就向大家介绍如何添加代码实现关闭功能以及移动窗体的功能。 实现窗体的关闭及移动 1.往窗体上拖放一个按钮控件。 2.在属性对话框中,将该控件的Text属性设置为“关闭”。 3.双击按钮添加一个Click事件处理函数。 4.在代码编辑器中添加如下代码: private void button1_Click(object sender, System.EventArgs e){   this.Close();}5. 接下来就是实现窗体的移动功能。添加以下代码来创建一个Point对象,该对象(作为一个变量)决定在什么情况下移动窗体。 private Point mouse_offset;6. 创建窗体的MouseDown事件的事件处理函数。为该事件添加代码后,用户就可以在任何位置移动窗体了。代码如下: private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){      mouse_offset = new Point(-e.X, -e.Y);}7. 创建窗体的MouseMove事件的事件处理函数。当鼠标左键被按下,同时鼠标被移动时,窗体的Location属性就被设置为新的位置了,这样窗体就被用户拖动了。 private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){   if (e.Button == MouseButtons.Left)    {      Point mousePos = Control.MousePosition;      mousePos.Offset(mouse_offset.X, mouse_offset.Y);      Location = mousePos;   }}8. 保存工程。按Ctrl+F5可以运行该程序。现在程序的界面还是和以前的一样,不过你可以用鼠标移动窗体并通过按按钮来关闭窗体了。
      

  4.   

    我看了桌面天气秀,form.Opacity = 0.5 试试看
      

  5.   

    整个界面的窗体消失,不能被选中
    其实就是 private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){   if (e.Button == MouseButtons.Left)    {      Point mousePos = Control.MousePosition;      mousePos.Offset(mouse_offset.X, mouse_offset.Y);      Location = mousePos;   }}不起作用
      

  6.   

    感谢egxsun,还有一个问题,这样实现,如果窗体恰好在桌面的一个icon上面,那么是点中不到那个icon。可是天气秀那个软件是可以的透过它选中icon的,也就是说它的窗体是在icon的下面,这又如何解决呢???
      

  7.   

    按 binbare(学习·学习·再学习!) 所说TransparencyKey怎么不起作用?
      

  8.   

    恩,我尝试了也不行。
    另外,仅仅是让MouseMove不起作用还不行。
    因为按“显示桌面”按钮会让窗体最小化,窗体会挡住桌面的图标,窗体会挡住其下面其他窗体这些问题在桌面天气秀和雪狐的那几个软件里都被解决了。所以更像是嵌到桌面里!
    还需要高人出来指点
      

  9.   

    因为对.net并不熟悉,只想说一下自己的看法,请大家补充
    1,伪装的有影无形,是去除了标题栏和鼠标事件的窗口
    2,嵌入桌面:也就是让这个窗体在最下层(待定),因为我只知道可以vc6,.net设置在最上层,不知道如何让窗体设置在桌面icon的下面
    3,鼠标穿过:截获鼠标点击事件,传递给位于这个区域下面的窗体,并将自己设置成2或许实现了3,第2点也就没问题了
    不过第3点实现方法召唤代码,好久不在win下面编程了,都就饭吃了-_-