Предотвращение изменения размера рамки формы пользовательским маркером изменения размера рамки - PullRequest
0 голосов
/ 24 июня 2018

В настоящее время я занят разработкой формы WinForms без полей, и я только что получил код из здесь .Я изменил его для своих нужд, но я застрял.Как бы я ограничил размер его изменения?

В настоящее время я могу изменить размер своего окна так, чтобы оно было простой точкой на экране.Как я могу поставить «колпачок» на минимальный размер?

Вот фрагмент кода, используемого для изменения размера (должен работать как есть):

//Initializes the form
public Form1()
{
    InitializeComponent();
    this.DoubleBuffered = true;
    this.SetStyle(ControlStyles.ResizeRedraw, true);
}
private const int cGrip = 16;      // Grip size
private const int cCaption = 32;   // Caption bar height;

//Overides what happens everytime the form is drawn
protected override void OnPaint(PaintEventArgs e)
{
    //Draws a border with defined width
    int width = 1;
    Pen drawPen = new Pen(titleBar.BackColor, width);
    e.Graphics.DrawRectangle(drawPen, new Rectangle(width / 2, width / 2, this.Width - width, this.Height - width));
    drawPen.Dispose();

    //Draws the resizer grip
    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.Coral, rc);


}

//Handles windows messages
protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x84)
    {  // Trap WM_NCHITTEST
        Point pos = new Point(m.LParam.ToInt32());
        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);
}

Просто как примечаниеЯ не очень опытный программист C #.Мой единственный предыдущий опыт работы на C # - программирование на Unity, поэтому я был бы признателен, если бы вы дали мне подробное объяснение того, какое решение у вас может быть.

1 Ответ

0 голосов
/ 24 июня 2018

Независимо от того, форма не имеет границ или нет, вы все равно можете использовать свойства MinimumSize и MaximumSize.

Попробуйте это:

public Form1()
{
    InitializeComponent();
    this.DoubleBuffered = true;
    this.SetStyle(ControlStyles.ResizeRedraw, true);

    this.MinimumSize = new Size(200, 200);
    this.MaximumSize = new Size(800, 600);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...