none
四周半透明阴影边框的窗体要怎么做? RRS feed

  • 问题

  • 

    类似360手机助手这样窗体四周的边框 半透明阴影的效果是怎么做出来的?有没有例子?


    • 已编辑 Lacuz 2012年10月15日 1:45
    2012年10月15日 1:45

全部回复

  • 参照下这里:

    http://www.cnblogs.com/Isabella/archive/2011/12/29/2305733.html


    http://blog.csdn.net/zx13525079024

    2012年10月15日 2:30
  • 参照下这里:

    http://www.cnblogs.com/Isabella/archive/2011/12/29/2305733.html


    http://blog.csdn.net/zx13525079024

    这个不是四周的,只有右下
    2012年10月15日 2:37
  • Windows Vista及Windows 7本身窗体就是附有阴影效果的,api都在user32.dll,

    你是想在什么系统中运行


    http://blog.csdn.net/zx13525079024

    2012年10月15日 5:23
  • 不能做成都兼容的吗?
    2012年10月16日 1:49
  • 用一张阴影效果的png图片作为背景图片,把窗体边框设置为none,这样试试


    http://blog.csdn.net/zx13525079024

    2012年10月16日 1:57
  • 这样窗体最大化和调整大小了怎么办。。
    2012年10月16日 2:00
  • 设置背景图片的布局

     this.BackgroundImageLayout = ImageLayout.Zoom;

    设置边框

         private void Form7_Load(object sender, EventArgs e)
            {
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.BackColor = Color.Silver;
                this.TransparencyKey = this.BackColor;  
    }


    http://blog.csdn.net/zx13525079024

    2012年10月22日 8:37
  • 我这试不行啊?求完整代码
    2012年10月22日 8:58
  •   public partial class Form7 : Form
        {
            public Form7()
            {
                //把背景图片放在D盘,你可以复制到应用程序目录下面
                image = Image.FromFile(@"d:\\bg.png");
                InitializeComponent();
                this.BackgroundImageLayout = ImageLayout.Zoom;
                this.BackgroundImage = image;
          
            }
            private Image image;
            private RectangleF rect;
            private void DrawBackgroudImage()
            {
                try
                {
                    Graphics g = this.CreateGraphics();
                    g.DrawImage(image, rect);
                    g.Dispose();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
    
            private void Form7_Load(object sender, EventArgs e)
            {
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.BackColor = Color.Silver;
                this.TransparencyKey = this.BackColor;  
            }
    
            private void Form7_Resize(object sender, EventArgs e)
            {
                rect = new RectangleF(0, 0, this.ClientSize.Width, this.ClientSize.Height);
                DrawBackgroudImage();     
            }
    
            private void Form7_Paint(object sender, PaintEventArgs e)
            {
                DrawBackgroudImage();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.WindowState = FormWindowState.Maximized;//窗口最大化 
            }
    
            const int WM_NCHITTEST = 0x0084;
            const int HTLEFT = 10;    //左边界
            const int HTRIGHT = 11;   //右边界
            const int HTTOP = 12; //上边界
            const int HTTOPLEFT = 13; //左上角
            const int HTTOPRIGHT = 14;    //右上角
            const int HTBOTTOM = 15;  //下边界
            const int HTBOTTOMLEFT = 0x10;    //左下角
            const int HTBOTTOMRIGHT = 17; //右下角
    
            protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
                switch (m.Msg)
                {
                    case WM_NCHITTEST:
                        {
                            Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF);
                            vPoint = PointToClient(vPoint);
                            //判断:仅当当前窗体状态不是最大化时,相关鼠标事件生效
                            if (this.WindowState != FormWindowState.Maximized)
                            {
                                if (vPoint.X < 10)
                                {
                                    if (vPoint.Y < 10)
                                    {
                                        m.Result = (IntPtr)HTTOPLEFT;
                                    }
                                    else if (vPoint.Y > this.Height - 10)
                                    {
                                        m.Result = (IntPtr)HTBOTTOMLEFT;
                                    }
                                    else
                                    {
                                        m.Result = (IntPtr)HTLEFT;
                                    }
                                }
                                else if (vPoint.X > this.Width - 10)
                                {
                                    if (vPoint.Y < 10)
                                    {
                                        m.Result = (IntPtr)HTTOPRIGHT;
                                    }
                                    else if (vPoint.Y > this.Height - 10)
                                    {
                                        m.Result = (IntPtr)HTBOTTOMRIGHT;
                                    }
                                    else
                                    {
                                        m.Result = (IntPtr)HTRIGHT;
                                    }
                                }
                                else if (10 < vPoint.X && vPoint.X < this.Width - 10)
                                {
                                    if (vPoint.Y < 10)
                                    {
                                        m.Result = (IntPtr)HTTOP;
                                    }
                                    else if (vPoint.Y > this.Height - 10)
                                    {
                                        m.Result = (IntPtr)HTBOTTOM;
                                    }
                                }
                            }
                            break;
                        }
                }
            }
    

    效果图

    背景图片


    http://blog.csdn.net/zx13525079024

    2012年10月25日 6:45
  • 有点问题,最大化后阴影边框也放大了,最好能让最大化时不显示阴影边框,而且最大化把开始菜单也遮住了..
    2012年10月26日 7:33
  • 背景图

    我自己重绘了窗体,用的png图片和bmp图片都无法正常显示原图的透明度

    没人会解决了吗?

    2012年10月31日 1:16
  • 无法显示原图的透明度是什么意思?

    你设置了TransparencyKey属性吗?


    http://blog.csdn.net/zx13525079024

    2012年10月31日 5:28
  • 无法显示原图的透明度是什么意思?

    你设置了TransparencyKey属性吗?


    http://blog.csdn.net/zx13525079024

     this.BackColor = Color.Silver;
     this.TransparencyKey = this.BackColor; 

    这样设置会使整个窗体都透明,而不只是边框

    2012年10月31日 7:22
  • 你传的背景图是jpg的?

    你贴的效果图也不是半透明边框的
    • 已编辑 Lacuz 2012年10月31日 7:42
    2012年10月31日 7:35
  • 求用 UpdateLayeredWindow 方法透明窗体边框的作法
    2012年11月1日 2:27