Windows Forms에서 크기 조정 및 이동이 가능한 테두리 없는 양식 만들기
Windows Forms에서는 "FormBorderStyle" 속성을 "None"으로 설정하여 테두리 없는 양식을 쉽게 만들 수 있습니다. 그러나 이 기본 작업은 양식 크기를 조정하는 기능을 비활성화합니다. 이러한 한계를 극복하려면 더 발전된 방법이 필요합니다.
다음 코드는 테두리 없는 양식을 이동하고 크기를 동시에 조정하는 사용자 정의 솔루션을 보여줍니다.
<code class="language-csharp">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; // 调整大小控制柄大小 private const int cCaption = 32; // 标题栏高度 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) { // 捕获WM_NCHITTEST消息 Point pos = new Point(m.LParam.ToInt32()); pos = this.PointToClient(pos); if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) { m.Result = (IntPtr)17; // HTBOTTOMRIGHT return; } } base.WndProc(ref m); } }</code>
코드 작동 방식 설명:
OnPaint
재정의된 메서드는 제목 표시줄을 시뮬레이션하기 위해 양식 상단에 파란색 막대를 그립니다. DrawSizeGrip
함수는 양식의 오른쪽 하단에 제어 핸들을 그려서 드래그하여 크기를 조정할 수 있습니다. WndProc
마우스 커서 위치를 감지하기 위해 WM_NCHITTEST 메시지를 가로채는 메서드를 재정의합니다. 커서가 제목 표시줄이나 컨트롤 핸들 내에 있으면 적절한 적중 테스트 코드가 반환됩니다. 코드의 pos.Y
를 pos.X
으로 변경하여 논리적이고 오른쪽 하단에 있는 크기 조정 핸들 영역이 올바르게 감지되도록 해야 합니다. 위 내용은 Windows Forms에서 크기 조정 및 이동이 가능한 테두리 없는 양식을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!