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 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
        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);
        }
时间: 2024-08-03 20:28:12

winform 移动窗体,和窗体阴影(引用)的相关文章

C# WinForm 父窗体 子窗体 传值

C# WinForm 父窗体 子窗体 传值 本次示例效果如下:Form1为父窗体(包含textBox1.button1)Form2为子窗体(包含textBox2.button2) 父窗体给子窗体传值==================1.点击Form1的button1 打开Form2  父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值 public partial class Form1 : Form    {        public Form1()        {   

C# WinForm 拖动无边框窗体 改变无边框窗体尺寸

经常遇到这种情况.窗体的边框去掉了.然后种种问题就出来了:不能拖动.不能改变窗体大小.不能......当然.肯定有解决方案滴*^_^*今天的目标就是:可以直接拖动没有边框的窗体.可以直接拉拽窗体改变其大小.制作步骤如下:新建WinForm程序.添加一个启动的窗体.将其边框设置为None.进入代码编辑界面.定义如下常量值: const int Guying_HTLEFT = 10; const int Guying_HTRIGHT = 11; const int Guying_HTTOP = 12

winform窗体跟随窗体

Form2 frm2 = new Form2(); private void MoveProc() { frm2.StartPosition = FormStartPosition.CenterParent; frm2.Left = this.Left + panel1.Left; frm2.Top = this.Top + panel1.Top; } public Form1() { InitializeComponent(); MoveProc(); this.AddOwnedForm(fr

winform退出或关闭窗体时弹窗提示代码:转

winform退出或关闭窗体时弹窗提示代码,当我们点击窗体的 X 按钮时,会弹出一个对话框,询问我们是直接退出,还是最小化到托盘,还是取消这个行为.或是是否保存当前修改等等.以下以最小化到托盘为例.        首先, 要确定已经将控件NotifyIcon拖到应用窗体中,属性name为notifyicon1. 然后, 双击窗体的FormClosing的事件 ,具码内容如下: private void Form1_FormClosing(object sender, FormClosingEve

Winform开发中的窗体重复及灵活切换问题

Winform开发中的窗体重复及灵活显示问题 1.问题引入 在项目中需要实现主窗体点击按钮后打开子窗体,但是如果不限制的话每次点击都会打开一个新窗体,用户体验不好还浪费内存.所以这里要做的是限制每个子窗体只可以打开一次,如果打开后没有关闭子窗体或者子窗体被最小化了,就直接把已打开的窗体激活并置顶显示.同时还要满足不同的子窗体是可以共存的,也就是只能同时有一个子窗体A,子窗体B,子窗体C--但是子窗体ABC之间是可以同时存在并互相切换的. 2.解决思路 这里我的做法是写两个方法:ShowOpenF

winform建立非矩形窗体

非规则窗体可能会需要加的功能代码: 1:因为没有了最上边的标题栏,所以需要加窗体鼠标拖动功能,在Form里面加如下代码: #region 移动窗体 // 移动窗体 const int WM_NCLBUTTONDOWN = 0xA1; const int HT_CAPTION = 0x2; [System.Runtime.InteropServices.DllImport("user32.dll")] static extern int SendMessage(IntPtr hWnd,

winform弹出唯一窗体的方法

Form1中btn1按钮点击show出Form2,当Form2处于开启状态时,再次点击btn1不会继续弹出窗体,而是将焦点定位至已开启的Form2上:当Form2关闭后,再次点击btn1则会show出一个新的Form2: Form1: //创建一个全局集合,用来放置已经show出的窗体对象 List<Form> list = new List<Form>(); //btn1点击事件: private void button1_Click(object sender, EventAr

WinForm排列MDI子窗体

如果一个MDI窗体中有多个子窗体同时打开,假如不对其排列顺序进行调整,那么界面会非常的混乱,而且不容易浏览.那么如何解决这个问题呢?我们可以通过使用带有MdiLayout枚举的LayoutMdi方法来排列多文档界面父窗体中的子窗体.语法:public void LayoutMdi (MdiLayout value)value:是MdiLayout枚举值之一,用来定义MDI子窗体的布局.MdiLayout枚举用于指定MDI父窗体中子窗体的布局.语法:public enum MdiLayoutMdi

透明窗体透明窗体 控件正常显示

//TransparentFrm透明窗体透明窗体 控件正常显示 {以图片的形状作为窗体形态}{使窗体透明 透明的只剩下个控件} // 调用 setFormTransParent(Form1); procedure setFormTransParent(Form:TForm); begin Form.BorderStyle:=bsNone; Form.TransparentColor:=True; Form.TransparentColorValue:=20; Form.Color:=Form.T