>백엔드 개발 >C++ >C#에서 경계없는 형태를 이동할 수있는 방법은 무엇입니까?

C#에서 경계없는 형태를 이동할 수있는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-24 15:31:11675검색

How Can I Make a Borderless Form Movable in C#?

경계 없는 이동 가능한 폼 만들기(C#)

테두리 양식은 크기 조정 및 이동이 쉽지만 항상 최선의 선택은 아닙니다. 때로는 경계선 없는 디자인을 원할 수도 있지만 이는 난제를 안겨줍니다. 경계선 없이 양식을 어떻게 이동할 수 있습니까? 이를 달성하는 방법은 다음과 같습니다.

이 방법은 Win32 API를 사용하여 제목 표시줄이 있는 창의 동작을 시뮬레이션합니다. 다음 상수와 함수가 필요합니다.

<code class="language-csharp">public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ReleaseCapture();</code>

경계 없는 형식의 MouseDown 이벤트 핸들러에서 다음 코드를 구현합니다.

<code class="language-csharp">private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
}</code>

이 코드는 제목 표시줄을 클릭하는 동작을 시뮬레이션하므로 양식의 아무 곳이나 클릭하여 전체 양식을 이동할 수 있습니다. 마우스 왼쪽 버튼을 누르면 캡처가 해제되고 폼의 "제목 표시줄"(HT_CAPTION)에 있는 버튼이 눌려졌음을 나타내는 메시지가 창 관리자에게 전송됩니다. 이 동작을 시뮬레이션하면 원하는 테두리 없는 디자인에 영향을 주지 않고 테두리가 있는 것처럼 양식을 이동할 수 있습니다.

위 내용은 C#에서 경계없는 형태를 이동할 수있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.