大家有没有用过桌面时钟,桌面日历之类的程序,鼠标穿透功能如何实现的?

解决方案 »

  1.   

    同意sunliangchao(sunliangchao).
    可见部分穿透你是不是指透明的那种,那是通过可见度来设置的.
      

  2.   

    sunliangchao(sunliangchao)言之有理
      

  3.   

    这是Window提供的窗口风格中的2种: 
     SetWindowLong(Handle,   GWL_EXSTYLE,   GetWindowLong(Handle,   GWL_EXSTYLE)   or     
      WS_EX_TRANSPARENT   or   //忽略一切消息(WM_PAINT除外)   
      WS_EX_LAYERED);             //层风格,有他才能支持半透明   
      SetLayeredWindowAttributes(Handle,   Color,   100,   LWA_ALPHA   or   LWA_COLORKEY);   
    代码很简单,应该能满足你的需要
      

  4.   

    SetWindowLong 也不行,还是有窗口,还是能拦截消息。而且还是四方框的窗口,它只是暂时把下面的窗口内容画上来一下,根本不能动态透明。SetLayeredWindowAttributes函数没见过,哪里有?
      

  5.   

    在声明一下我需要的功能: 功能是这样的,视觉上透明不透明是另一个问题,
    现在的问题是,我的窗口是不透明的,比如我挡在word程序前面,当用户在我的
    窗口上右键的时候,我的窗口却把消息传递给了word,word弹出他的菜单,虽然
    我的窗口能看见,但是在操作和使用的时候,就像我的窗口不存在一样。这个
    功能叫做鼠标穿透,不叫窗体透明,明白?这个东西就是用于在任何窗体之前
    显示时钟,而我不希望时钟程序本身能够相应任何键盘鼠标事件。用户点击时钟
    的时候,实际上透过时钟界面点击到了时钟下一层的程序上。
      

  6.   

    谁用过 VolumeEasy ,他是如何实现显示功能的?
      

  7.   

    看一下子这个 private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    System.Drawing.Drawing2D.GraphicsPath myGraphicsPath  = new 
    System.Drawing.Drawing2D.GraphicsPath();
    Point[] pt={
       new Point(0,30),
       new Point(0,0),
       new Point(30,0),
       new Point(30,5),
       new Point(5,5),
       new Point(5,30),
       new Point(0,30)    };

    myGraphicsPath.AddLines(pt);
    Point[] pt1={
    new Point(170,0),
    new Point(200,0),
    new Point(200,30),
    new Point(195,30),
    new Point(195,5),
    new Point(170,5),
    new Point(170,0)
    };

    myGraphicsPath.AddLines(pt1);

    this.Region = new Region(myGraphicsPath);
    }