본문 바로가기

Dev::DotNet/C#

마우스 이동에 따른 화면 이동

Form 이나 Window 을 특정 모양으로 구성할 때 

보통 별도 컨트톨을 이용해서 Caption 을 표시할 것이며 해당 Caption 을 구성한 컨트롤을 이용하여 

화면(Form or Window) 을 이동시켜야 한다.


순진했을때는 mouse 위치를 가지고 계산해서 하려고 했었는데 그런 번거로운 작업없이 쉽게 구현이 가능하다.


WPF 에서는 

Window 자체에 해당 기능의 메소드를 제공해준다.

public class Window : ContentControl, IWindowService

{

……. 

//

      // 요약:

      //     마우스 왼쪽 단추를 누른 상태로 창 클라이언트 영역의 노출된 영역에서 창을 끌 수 있게 합니다.

      //

      // 예외:

      //   System.InvalidOperationException:

      //     왼쪽 마우스 단추를 누르지 않은 경우

      [SecurityCritical]

      public void DragMove();

}


Winform 에서는 

몇개의 API 를 통해서 구현이 가능하다.

using System;

using System.Windows.Forms;

using System.Runtime.InteropServices;

 

namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        [DllImportAttribute("user32.dll")]

        private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

 

        [DllImportAttribute("user32.dll")]

        private static extern bool ReleaseCapture();

 

        private const int WM_NCLBUTTONDOWN = 0xA1;

        private const int HT_CAPTION = 0x2;

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void label1_MouseDown(object sender, MouseEventArgs e)

        {

            if(e.Button == System.Windows.Forms.MouseButtons.Left)

            {

                ReleaseCapture();

                SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);

            }

        }

    }

}