private void Form1_Resize(object sender, EventArgs e) if (this.WindowState == FormWindowState.Normal) SetWindowRegion(); this.Region = null; public void SetWindowRegion() System.Drawing.Drawing2D.GraphicsPath FormPath; FormPath = new System.Drawing.Drawing2D.GraphicsPath(); Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); FormPath = GetRoundedRectPath(rect, 10); this.Region = new Region(FormPath); /// /// /// 窗体大小 /// 圆角大小 /// private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) int diameter = radius; Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter)); GraphicsPath path = new GraphicsPath(); path.AddArc(arcRect, 180, 90);//左上角 arcRect.X = rect.Right - diameter;//右上角 path.AddArc(arcRect, 270, 90); arcRect.Y = rect.Bottom - diameter;// 右下角 path.AddArc(arcRect, 0, 90); arcRect.X = rect.Left;// 左下角 path.AddArc(arcRect, 90, 90); path.CloseFigure(); return path; #endregion #region 窗体拖动 Point mouseOff; bool leftFlag=false; //第一步 private void Form1_MouseDown(object sender, MouseEventArgs e) if (e.Button==MouseButtons.Left) mouseOff = new Point(-e.X,-e.Y); leftFlag = true; //第二步 private void Form1_MouseMove(object sender, MouseEventArgs e) if (leftFlag) Point mouseSet = Control.MousePosition; mouseSet.Offset(mouseOff.X,mouseOff.Y); this.Location = mouseSet; //第三步 private void Form1_MouseUp(object sender, MouseEventArgs e) if (leftFlag) leftFlag = false; #endregion #region 最小化、最大化、关闭 private void Close_Click(object sender, EventArgs e) this.Close(); private void MaximumSize_Click(object sender, EventArgs e) if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal; this.WindowState = FormWindowState.Maximized; private void MinimumSize_Click(object sender, EventArgs e) this.WindowState = FormWindowState.Minimized ; #endregion #region 窗体圆角的实现private void Form1_Resize(object sender, EventArgs e){if (this.WindowState == FormWindowState.Normal){SetWindowRegion();}else{this.Region = null;}} public void SetWindowR...
自定义 窗体 最大化 最小化 关闭 按钮.zip源码C# WinForm 实例源码适合研究学习技术 自定义 窗体 最大化 最小化 关闭 按钮.zip源码C# WinForm 实例源码适合研究学习技术 1.适合学生做毕业设计参考模板。 2.适合程序员学习开发研究用 3.适合小公司做项目参考技术使用用
当我们 关闭 QQ的时候,会出现一个提示,弹出一个窗口,询问提示我们是 最小化 还是退出程序运行。这是一种很人性化的提示操作方式。这篇文章就是要模拟QQ的这种效果,在 WinForm 中实现。 1、首先创建一个 WinForm 项目 2、打开Form1 窗体 设计,设置Form1窗口的FormClosing事件的委托 要在这个方法里边进行 关闭 提示操作,以及根据用户的选择,进行相应的处理。 3、创建...
本片博客主要讲的事最近总结的一些关于 窗体 自定义 : 1.首先创建一个BaseForm 窗体 ,通过设置属性FormBorderStyle=None为无边框 窗体 ,代码如下:  public partial class BaseForm : Form         // 图片名称         public const String IMG_MIN = "btn_min";
最近在编写C/S结构应用程序时,感觉 窗体 的标题栏样式太死板了,标题文字不能更改大小、颜色、字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题,最后我决定自己研究动手画一个标题栏出来,经过今天一天的研究与编写,终于完成全部功能,现公布一下我的设计思路。 一、去掉Form类自带的标题栏                          C#移动无标题栏 窗体 的三种代码:第一种采用,需注意 窗体 上的控件是否把 窗体 覆盖了。。。MouseDown、MouseMove、MouseUp事件应该是鼠标所处位置最顶层的控件的事件 在 窗体 的类中声明两个变量 private Point mouseOffset; //记录鼠标指针的坐标 private bool isMouseDown = false; //记录鼠标按键是否按下 创建该 窗体 MouseDown、MouseMove、MouseUp事件的相应处理程序 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) int xOffset; int yOffset; if (e.Button == MouseButtons.Left) xOffset = -e.X ; yOffset = -e.Y ; mouseOffset = new Point(xOffset, yOffset); isMouseDown = true; private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) if (isMouseDown) Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X, mouseOffset.Y); Location = mousePos; private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动 窗体 if (e.Button == MouseButtons.Left) isMouseDown = false; 第二种调用API 未验证 using System.Runtime.InteropServices; [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 = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; private void Form1_MouseDown(object sender, MouseEventArgs e) ReleaseCapture(); SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); 第三种未验证 private bool isMouseDown = false; private Point FormLocation; //form的location private Point mouseOffset; //鼠标的按下位置 [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息 private const int SC_MOVE = 0xF010;//移动信息 private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息 private const int WM_NCHITTEST = 0x84;//鼠标在 窗体 客户区(除了标题栏和边框以外的部分)时发送的消息 private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息 private const int SC_MAXIMIZE = 0xF030;// 最大化 信息 private const int SC_MINIMIZE = 0xF020;// 最小化 信息 protected override void WndProc(ref Message m) switch (m.Msg) case WM_SYSCOMMAND: if (m.WParam == (IntPtr)SC_MAXIMIZE) m.WParam = (IntPtr)SC_MINIMIZE; break; case WM_NCHITTEST: //如果鼠标移动或单击 base.WndProc(ref m);//调用基类的窗口过程——WndProc方法处理这个消息 if (m.Result == (IntPtr)HTCLIENT)//如果返回的是HTCLIENT m.Result = (IntPtr)HTCAPTION;//把它改为HTCAPTION return;//直接返回退出方法 break; base.WndProc(ref m);//如果不是鼠标移动或单击消息就调用基类的窗口过程进行处理 private void Form1_Load(object sender, EventArgs e) ------------------------------- 如何在 窗体 标题栏左边的控制菜单加入自己的菜单啊? 我们一般在窗口标题栏点右键 或 按Alt+空格 可以弹出那个菜单。 ------解决方案-------------------- using System.Runtime.InteropServices; [DllImport( "user32.dll ")] public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); [DllImport( "user32.dll ")] public static extern bool InsertMenu(IntPtr hMenu, uint uPosition, uint uFlags, uint uIDNewItem, string lpNewItem); public const int MF_BYCOMMAND = 0; public const int MF_STRING = 0; public const int MF_BYPOSITION = 0x400; public const int MF_SEPARATOR = 0x800; private const uint SC_ABOUT = 0x0001; public const int WM_SYSCOMMAND = 0x0112; private void Form1_Load(object sender, EventArgs e) IntPtr vMenuHandle = GetSystemMenu(Handle, false); InsertMenu(vMenuHandle, 255, MF_STRING, SC_ABOUT, "About... "); protected override void WndProc(ref Message m) switch (m.Msg) case WM_SYSCOMMAND: if ((uint)m.WParam == SC_ABOUT) MessageBox.Show( "Zswang 路过! "); break; base.WndProc(ref m);
应用中会涉及到对 最大化 最小化 关闭 按钮三种按钮的控制方法,下面一次说明对这三种按钮的控制方法. 最大化 :MaximizeBox, 最小化 :MinimizeBox。 如果设置一个为False 的时候会显示不可用,两个都设置为False 的时候,两个按钮同时消失。 关闭 按钮没有设置不可用 但是它有一个ControlBox属性,设置为False 的时候 最小化 最大化 关闭 按钮都会消失。 设置对窗口大小不能调整 找到【FormBorderStyle】选项,在选项列表中选择【FixedDialog】,这样就可以固
解决 winform 中mdi子 窗体 加载时显示 最大化 最小化 按钮的方法场景:在mid加载子 窗体 的时候如果指定WindowState为Maximized,加载完成后主 窗体 会显示 最大化 最小化 关闭 的按钮图标。解决方法: 1.更改主 窗体 FormMain的属性。制定MainMenuStrip的属性为menuStrip1控件。menuStrip1控件就是主 窗体 上的菜单栏。 2.在menuStrip1控件的It
winform & wpf 全屏 最大化 ( 窗体 样式=None),必须在 最大化 之前设置样式属性,所以需要截获 窗体 最大化 事件。 const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE = 0xF020; const int SC_MAXIMIZE = 0xF030; WinForm 实现: windows的消息机制, 重写方法: protected ov