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