VB.NET 2008/VB - 폼(Form)

Windows Forms - 마우스 입력

본클라쓰 2011. 4. 10. 09:35

 

마우스 입력을 받아 처리하는 것은 모든 Widnows 응용 프로그램에서 중요한 부분 중 하나이다. 마우스 이벤트를 처리하여 응용 프로그램의 작업을 수행하거나 마우스 위치 정보를 사용하여 적중 테스트 또는 기타 작업을 수행할 수 있다. 또한 응용 프로그램의 컨트롤에서 마우스 입력이 처리되는 방식을 변경할 수도 있다.

 

사용자가 마우스를 움직임에 따라 운영 체제에서 마우스 포인터를 이동한다. 마우스 포인터에는 핫 스폿이라는 하나의 픽셀이 있으며, 운영 체제에서는 이 픽셀을 추적하여 포인터 위치를 인식한다. 사용자가 마우스를 움직이거나 마우스 단추를 누르면 HotSopt이 들어 있는 Control이 해당 마우스 이벤트를 발생시킨다.

 

마우스 이벤트를 처리할 때 MouseEventArgs의 Location 속성을 사용하거나 Cursor 클래스의 Position 속성을 사용하여 현재 마우스 위치를 가져올 수 있다. 이후에 마우스 위치 정보를 사용하여 적중 테스트를 수행한 다음, 마우스 위치를 기반으로 작업을 수행할 수 있다. 적중 테스트 기능은 Windows Forms에서 ListView, TreeView, MonthCalendar 및 DataGridView 컨트롤과 같은 몇 가지 컨트롤에 기본적으로 제공되어 있다.

 

적중 테스트를 MouseHover와 같은 적절한 마우스 이벤트와 함께 사용하면 응용 프로그램에서 특정 작업을 수행해야 할 시점을 파악할 때 아주 유용하다.

 

 

마우스 이벤트가 발생하는 시점은 다음과 같다.

 

- Click : 마우스 단추를 놓을 때 발생하며, MouseUp 이벤트보다 먼저 발생한다. (EventArgs 형식의 인수)

- MouseClick : 마우스로 컨트롤을 클릭할 때 발생. (MouseEventArgs 형식의 인수)

- DoubleClick : 컨트롤을 두 번 클릭했을 때 발생. (EventArgs 형식의 인수)

- MouseDoubleClick : 마우스로 컨트롤을 두 번 클릭할 때 발생. (MouseEventArgs 형식의 인수)

- MouseDown : 마우스 포인터가 컨트롤 위에 있을 때 사용자가 마우스 단추를 누르면 발생. (MouseEventArgs 형식의 인수)

- MouseEnter : 마우스 포인터가 컨트롤의 테두리나 클라이언트 영역에 들어갈 때 발생. (EventArgs 형식의 인수)

- MouseHover : 컨트롤 위에서 마우스 포인터를 멈추고 잠시 기다릴 때 발생. (EventArgs 형식의 인수)

- MouseLeave : 마우스 포인터가 컨트롤의 테두리나 클라이언트 영역을 벗어날 때 발생. (EventArgs 형식의 인수)

- MouseMove : 컨트롤 위에서 마우스 포인터를 움직일 때 발생. (MouseEventArgs 형식의 인수)

- MouseUp : 컨트롤 위해서 사용자가 마우스 단추를 놓으면 발생. (MouseEventArgs 형식의 인수)

- MouseWheel : 컨트롤에 포커스가 있는 상태에서 사용자가 마우스 휠을 돌릴 때 발생. (MouseEventArgs 형식의 인수)

 

 

 

SystemInformation 클래스에는 마우스 기능을 설명하고 마우스가 운영 체제와 상호 작용하는 방법을 지정하는 속성이 포함되어 있다.

 

- DoubleClickSize : 운영 체제에서 두 번의 클릭이 두 번 클릭으로 간주되도록 사용자가 두 번 클릭해야 하는 영역의 크기를 픽셀 단위로 반환

- DoubleClickTime : 첫 번째 클릭과 두 번재 클릭 사이 간격의 최대 시간을 밀리초 단위로 가져옴

- MouseButtons : 마우스의 단추 수를 가져옴

- MouseButtonsSwapped : 마우스 왼쪽 단추와 오른쪽 단추의 기능이 바뀌었는지 여부를 나타내는 값을 반환

- MouseHoverSize : 마우스 호버 메시지가 생성되기 전에 마우스 포인터가 마우스 호버 시간 동안 머물러야 하는 사각형의 크기를 픽셀 단위로 가져온다.

- MouseHoverTime : 마우스 호버 메시지가 생성되기 전에 마우스 포인터가 호버 사각형에 머물러야 하는 시간을 밀리초 단위로 반환

- MousePresent : 마우스가 설치되어 있는지 여부를 나타내는 값을 가져옴

- MouseSpeed : 현재 마우스 속도를 나타내는 값(1-20)을 가져옴

- MouseWheelPresent : 휠 마우스가 설치되어 있는지 여부를 나타내는 값을 가져옴

- MouseWheelScrollDelta : 마우스 휠을 한 번 돌릴 때의 델타 증분 값을 가져옴

- MousewheelScrollLines : 마우스 휠을 돌리 때 스크롤되는 줄 수를 가져옴.

 

 

 

마우스 입력을 처리할 때는 일반적으로 마우스 포인터의 위치와 마우스 단추의 상태를 알아야 한다.

 

MouseEventArgs는 마우스 단추 클릭 및 마우스 움직임 추적과 관련된 마우스 이벤트 처리기로 전달된다. MouseEventArgs는 클라이언트 좌표에서 마우스 포인터의 위치, 누른 마우스 단추 및 마우스 휠의 스크롤 여부 등 마우스의 현재 상태에 대한 정보를 제공한다. 마우스 포인터가 컨트롤 범위 안으로 들어간 시점과 범위를 벗어난 시점만 알려 주는 마우스 이벤트와 같은 경우는 EventArgs를 자세한 정보 없이 이벤트 처리기로 전달한다.

 

마우스 단추의 현재 상태나 마우스 포인터 위치를 파악하고 마우스 이벤트가 처리되지 않게 하려면 Control 클래스의 MouseButtons 및 MousePosition 속성을 사용하면 된다. MouseButtons에서는 현재 눌려져 있는 마우스 단추에 대한 정보를 반환한다. MousePosition에서는 마우스 포인터의 화면 좌표를 반환하며, 이 값은 Position에서 반환하는 값과 동일하다.

 

 

 

Windows Forms에는 끌어서 놓기 동작을 구현하는 메서드, 이벤트 및 클래스 집합이 포함되어 있다.

 

끌어서 놓기 작업을 수행하려면 Control 클래스의 DoDragDrop 메서드를 사용해야 한다. 끌기가 시작될 때 DoDragDrop 메서드가 호출된다. MouseDown 이벤트가 발생하는 동안 마우스 위치로부터 SystemInformation.DragSize 이상 마우스를 이동하면 끌기 작업이 시작된다. IndexFromPoint 메서드는 MouseDown 이벤트가 발생하는 동안 끌어 올 항목의 인덱스를 확인하는 데 사용된다.

 

끌어서 놓기 작업에는 두 가지 범주의 이벤트가 있다. 하나는 끌어서 놓기 작업의 현재 대상에서 발생하는 이벤트이고 또 하나는 끌어서 놓기 작업의 소스에서 발생하는 이벤트이다. 끌어서 놓기 작업의 현재 대상에서 발생하는 이벤트는 다음과 같다.

 

- DragEnter : 개체를 컨트롤의 범위로 끌 때 발생. (DragEventArgs 형식의 인수)

- DragOver : 마우스 포인터가 컨트롤의 범위 안에 있는 상태에서 개체를 끌 때 발생. (DragEventArgs 형식의 인수)

- DragDrop : 끌어서 놓기 작업을 완료했을 때 발생. (DragEventArgs 형식의 인수)

- Dragleave : 컨트롤의 범위 밖으로 끌 때 발생. (EventArgs 형식의 인수)