recorrer - Formulario sin límites y de tamaño variable(C#)
matrices en c# windows form (2)
Encontré un código en línea y lo copié, hasta ahora he podido obtener todo bien excepto por una cosa que es que quiero que el formulario (ventana) sea completamente sin bordes.
Estoy usando Visual Studio 2013 y esta pregunta es simplemente sobre el código que se necesita para que el formulario (ventana) no tenga bordes. El problema es que cuando lo haces sin márgenes, ya no se puede cambiar el tamaño, pero cuando tiene un borde, se puede cambiar el tamaño.
Sé que al usar un código es posible anular y lograr ambos. Esto es lo que tengo hasta ahora (copiado de otro sitio web). Esto elimina la barra superior que tiene el nombre del programa, hace que la forma sea movible haciendo clic y arrastrando el formulario, y se puede cambiar de tamaño.
El único problema es que el límite todavía está allí. ¿Qué código puedo agregar a esto para que el borde desaparezca? Quiero mantener este código actual porque está sirviendo un par de características que ya necesito.
Por cierto, miré algunas preguntas más antiguas con temas similares, pero no encontré el código correcto que necesito.
Para el mod que me dirigió a otro hilo: probé el código allí y no es exactamente lo que estoy tratando de lograr, aunque es un problema similar. Cuando probé ese código, no pude hacer clic en ningún lugar del formulario (ventana) para moverlo. Además, tenía una esquina redimensionable en la parte inferior derecha, que no es lo que estoy buscando. Necesito la función de cambio de tamaño en todas las esquinas y lados como una ventana normal.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BoxHider
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//Next line doesn''t seem to be working
this.FormBorderStyle = FormBorderStyle.None;
}
const int WM_NCHITTEST = 0x0084;
const int HTCLIENT = 1;
const int HTCAPTION = 2;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch (m.Msg)
{
case WM_NCHITTEST:
if (m.Result == (IntPtr)HTCLIENT)
{
m.Result = (IntPtr)HTCAPTION;
}
break;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x40000;
return cp;
}
}
}
}
Debe establecer el estilo de borde después de cargar el formulario:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.FormBorderStyle = FormBorderStyle.None;
}
Prueba esto:
public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}
protected override void WndProc(ref Message m)
{
const int RESIZE_HANDLE_SIZE = 10;
switch (m.Msg)
{
case 0x0084/*NCHITTEST*/ :
base.WndProc(ref m);
if ((int)m.Result == 0x01/*HTCLIENT*/)
{
Point screenPoint = new Point(m.LParam.ToInt32());
Point clientPoint = this.PointToClient(screenPoint);
if (clientPoint.Y <= RESIZE_HANDLE_SIZE)
{
if (clientPoint.X <= RESIZE_HANDLE_SIZE)
m.Result = (IntPtr) 13/*HTTOPLEFT*/ ;
else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
m.Result = (IntPtr) 12/*HTTOP*/ ;
else
m.Result = (IntPtr) 14/*HTTOPRIGHT*/ ;
}
else if (clientPoint.Y <= (Size.Height - RESIZE_HANDLE_SIZE))
{
if (clientPoint.X <= RESIZE_HANDLE_SIZE)
m.Result = (IntPtr) 10/*HTLEFT*/ ;
else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
m.Result = (IntPtr) 2/*HTCAPTION*/ ;
else
m.Result = (IntPtr) 11/*HTRIGHT*/ ;
}
else
{
if (clientPoint.X <= RESIZE_HANDLE_SIZE)
m.Result = (IntPtr) 16/*HTBOTTOMLEFT*/ ;
else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
m.Result = (IntPtr) 15/*HTBOTTOM*/ ;
else
m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ;
}
}
return;
}
base.WndProc(ref m);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x20000; // <--- use 0x20000
return cp;
}
}
fuentes informativas:
- https://.com/a/19670447/2352507
- Mango de cambio de tamaño personalizado en forma sin bordes C #
- http://www.csharp411.com/add-drop-shadow-to-borderless-form/