调整 Windows 个表格
Resizing Windows Forms
我有一个表单,其 FormBorderStyle 设置为 Sizable。这会在右下方创建抓地力。调整 window 大小的唯一方法是将鼠标恰好放在边缘。我想知道是否有一种方法可以更改光标以便在用户将鼠标悬停在手柄上时调整大小,或者我是否可以增加允许您在边缘调整大小的范围,这样您就不会您的鼠标位置必须如此精确。
试试这个
yourObject.Cursor = Cursors.SizeAll;
此站点上的更多信息:MSDN
这是一个类似 SO 问题的 link。这个家伙没有边界,所以你可能需要做一些不同的事情,但应该给你一个方向。我会在这里重新粘贴他的代码以完成:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16; // Grip size
private const int cCaption = 32; // Caption bar height;
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
}
protected override void WndProc(ref Message m) {
if (m.Msg == 0x84) { // Trap WM_NCHITTEST
Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
pos = this.PointToClient(pos);
if (pos.Y < cCaption) {
m.Result = (IntPtr)2; // HTCAPTION
return;
}
if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) {
m.Result = (IntPtr)17; // HTBOTTOMRIGHT
return;
}
}
base.WndProc(ref m);
}
}
我有一个表单,其 FormBorderStyle 设置为 Sizable。这会在右下方创建抓地力。调整 window 大小的唯一方法是将鼠标恰好放在边缘。我想知道是否有一种方法可以更改光标以便在用户将鼠标悬停在手柄上时调整大小,或者我是否可以增加允许您在边缘调整大小的范围,这样您就不会您的鼠标位置必须如此精确。
试试这个
yourObject.Cursor = Cursors.SizeAll;
此站点上的更多信息:MSDN
这是一个类似 SO 问题的 link。这个家伙没有边界,所以你可能需要做一些不同的事情,但应该给你一个方向。我会在这里重新粘贴他的代码以完成:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16; // Grip size
private const int cCaption = 32; // Caption bar height;
protected override void OnPaint(PaintEventArgs e) {
Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
}
protected override void WndProc(ref Message m) {
if (m.Msg == 0x84) { // Trap WM_NCHITTEST
Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
pos = this.PointToClient(pos);
if (pos.Y < cCaption) {
m.Result = (IntPtr)2; // HTCAPTION
return;
}
if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) {
m.Result = (IntPtr)17; // HTBOTTOMRIGHT
return;
}
}
base.WndProc(ref m);
}
}