none
C# 窗体及控件阴影效果的实现 RRS feed

  • 问题

  • 你好,

         想请教一个问题。

         C# 实现 WinForm 程序时如何让其出现的Form、Control 实现阴影效果呢。

         例如:

         1、在Form 四周显示一圈淡化的阴影。

         2、在控件四周显示一圈或只在右与下部显示类似的阴影呢。

         3、如何控制阴影的样式,如颜色、宽度等。

         谢谢关注!


    Healthy
    2011年4月28日 2:19

答案

  • 可以通过API实现

    public partial class Form1 : Form
      {
        #region 窗体边框阴影效果变量申明
    
        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);
    
        #endregion
    
    
        public Form1()
        {
          InitializeComponent();
          SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); //API函数加载,实现窗体边框阴影效果
    
        }
      }
    

    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Paul Zhou 2011年5月5日 2:58
    2011年4月29日 11:05

全部回复

  • 可以通过API实现

    public partial class Form1 : Form
      {
        #region 窗体边框阴影效果变量申明
    
        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);
    
        #endregion
    
    
        public Form1()
        {
          InitializeComponent();
          SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); //API函数加载,实现窗体边框阴影效果
    
        }
      }
    

    http://blog.csdn.net/zx13525079024
    • 已标记为答案 Paul Zhou 2011年5月5日 2:58
    2011年4月29日 11:05
  • 你好,

      谢谢你的帮助。

      再请教一下,不直接使用Win32 API,还有其它方法吗?

      


    Healthy
    2011年5月3日 8:05
  • 你好,

    调用API是根本的方法,我想其他的方法,即使有,也是封装调用了这样的API去实现的。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月5日 2:58
  • 你好,

         调用API 受限于操作系统啊,兼容性如何处理呢?并且还有其它问题。

         其它问题:

         1、调用此API ,只是在右侧、下侧出现阴影;如何在四周出现阴影。

         2、调用此API,阴影是灰色的渐变;如何如何设置其它颜色的渐变。




    • 已编辑 Healthy 2011年5月7日 9:43
    2011年5月5日 3:34
  • Windows Vista及Windows 7本身窗体就是附有阴影效果的,此API是处于user32.dll中的,如果系统不兼容,就说明此系统是不支持窗体阴影效果的。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年5月5日 3:41