none
winform如何实现象ADOBE公司软件初始界面那样的边框阴影? RRS feed

  • 问题

  • winform如何实现象ADOBE公司软件初始界面那样的边框阴影?

     

    如果不知道具体意思 可打开任何一个ADOBE公司出品的软件 在初始化界面 也就是加载信息界面 他的边框有阴影

    我想要这样的效果  不知道有没有简单的 如果没有简单的 复杂的也凑和

    2008年7月28日 13:53

答案

  • 调用API函数实现窗体阴影

    using System.Runtime.InteropServices;

    然后再窗口类的随便哪个地方加上

    const int CS_DROPSHADOW = 0x20000;
    const int GCL_STYLE = (-26);
    //声明Win32 API
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int SetClassLong(IntPtr hwnd,int nIndex,int dwNewLong);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int GetClassLong(IntPtr hwnd, int nIndex);

    最后在窗体的构造函数中加上:
    SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DROPSHADOW);

     

    2008年7月29日 3:11
    版主
  •  singledark 写:

    不好意思 我对API不太熟悉

    可以给一个完整的例子吗? 即使没有注释也没关系

    根据Sean Li的

     

    你把窗体的FormBoderStyle 设为None,然后再加一幅背景图,运行

     

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace 窗体阴影
    {
        public partial class Form1 : Form
        {
            const int CS_DROPSHADOW = 0x20000;
            const int GCL_STYLE = (-26);
            //声明Win32 API
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int GetClassLong(IntPtr hwnd, int nIndex);


            public Form1()
            {
                InitializeComponent();
                SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DROPSHADOW);
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }
        }
    }

     

     

    2008年7月31日 8:07

全部回复

  • 调用API函数实现窗体阴影

    using System.Runtime.InteropServices;

    然后再窗口类的随便哪个地方加上

    const int CS_DROPSHADOW = 0x20000;
    const int GCL_STYLE = (-26);
    //声明Win32 API
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int SetClassLong(IntPtr hwnd,int nIndex,int dwNewLong);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int GetClassLong(IntPtr hwnd, int nIndex);

    最后在窗体的构造函数中加上:
    SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DROPSHADOW);

     

    2008年7月29日 3:11
    版主
  • 不好意思 我对API不太熟悉

    可以给一个完整的例子吗? 即使没有注释也没关系

    2008年7月29日 4:10
  •  singledark 写:

    不好意思 我对API不太熟悉

    可以给一个完整的例子吗? 即使没有注释也没关系

    根据Sean Li的

     

    你把窗体的FormBoderStyle 设为None,然后再加一幅背景图,运行

     

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace 窗体阴影
    {
        public partial class Form1 : Form
        {
            const int CS_DROPSHADOW = 0x20000;
            const int GCL_STYLE = (-26);
            //声明Win32 API
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public static extern int GetClassLong(IntPtr hwnd, int nIndex);


            public Form1()
            {
                InitializeComponent();
                SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DROPSHADOW);
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }
        }
    }

     

     

    2008年7月31日 8:07
  • 不行~~~~~~~~~。。。

    你运行后是否成功?

    窗体边缘出现了明显的阴影吗?

    截个图 看看

    2008年7月31日 15:36