C#-WinForm-无边框窗体的移动和阴影-API

//窗体移动API,先导入命名空间,在委托MouseDown事件
//移动前准备
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, 

int IParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, 

IntPtr lParam);
private const int WM_SETREDRAW = 0xB;

//窗体移动事件
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        ReleaseCapture();
        SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + 

HTCAPTION, 0);
    }
}

无边框窗体移动API

复制API代码到窗体代码结构函数下方,引用命名空间,委托MouseDown的事件(李献策lxc)

     //窗体阴影API,放在结构函数上方,修改结构函数即可
        const int CS_DropSHADOW = 0x20000;
        const int GCL_STYLE = (-26);
        [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);
        }

窗体阴影API

复制API代码到结构函数上方,修改结构函数即可

API - 通用功能接口

做一个如下无边框的窗体

一、五边框窗体移动

复制API代码到窗体代码结构函数下方,引用命名空间,委托MouseDown的事件

public Form1()
        {
            InitializeComponent();
        }

        //窗体移动API
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);
        public const int WM_SYSCOMMAND = 0x0112;
        public const int SC_MOVE = 0xF010;
        public const int HTCAPTION = 0x0002;
        [DllImport("user32")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam);
        private const int WM_SETREDRAW = 0xB;

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
        }

无窗体移动代码 复制后

二、窗体阴影

时间: 2024-12-23 19:49:19

C#-WinForm-无边框窗体的移动和阴影-API的相关文章

C#WinForm无边框窗体移动方法、模仿鼠标单击标题栏移动窗体位置

C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体 新建窗体用于测试 方法一 1.定义一个位置信息Point用于存储鼠标位置 1 private Point mPoint; 2.给窗体等控件增加MouseDown和MouseMove事件 1 /// <summary> 2 /// 鼠标按下 3 /// </summary>

C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置

C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务栏从而移动窗体 新建窗体用于测试 方法一 1.定义一个位置信息Point用于存储鼠标位置 1 private Point mPoint; 2.给窗体等控件增加MouseDown和MouseMove事件 1 /// <summary> 2 /// 鼠标按下 3 /// </summary>

WinForm 无边框窗体和timer控件

一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图片的相对路径Application.StartupPath + "\\..\\..\\images\\btn_close_highlight.png" \..\文件夹名称... 向上翻一个文件夹 2.如何让窗体动起来调用窗体移动的API 如果有其它控件覆盖了窗体,那么写好鼠标按下的事件委托

winform 无边框窗体

一.无边框窗体1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式Mouseenter鼠标进入Mouseleave鼠标移出Mousedown鼠标按下 改变样式代码: pictureBox1.BackgroundImage = Image.FromFile(Application.StartupPath + "\\..\\..\\images\\btn_close_disable

WinForm 无边框窗体改变尺寸及移动窗体

#region 无边框窗体移动改变大小 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND =

WINFORM 无边框窗体 阴影与移动

//窗体移动API[DllImport("user32.dll")]public static extern bool ReleaseCapture();[DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int IParam);public const int WM_SYSCOMMAND = 0x0112;public c

winform无边框窗体点击任务栏最小化

protected override CreateParams CreateParams { get { const int WS_MINIMIZEBOX = 0x00020000; // Winuser.h中定义 CreateParams cp = base.CreateParams; cp.Style = cp.Style | WS_MINIMIZEBOX; // 允许最小化操作 return cp; } }

Winform无边框窗体拖动

调用示例 当然,BUG还是有的,不过基本需求倒也可以 原文地址:https://www.cnblogs.com/rbzz/p/9183269.html

Winform自定义无边框窗体

你还在为Winform原生窗体的丑陋而烦恼么?下面来看一下如何制作一个既漂亮又简单的窗体 先看一下效果图: 首先我们新建一个窗体FormM继承原生Form 看一下主要的代码 public partial class FormM : Form { public FormM() { InitializeComponent(); } /// <summary> /// 是否允许最大化 /// </summary> private bool maxVisible = true; [Desc