나. 마우스 이벤트 예광탄

이번에는 가상 키보드에 필요한 것은 아니지만 가상 마우스를 만든다고 하면 프로그램 방식으로 마우스 이벤트를 발생하는 방법을 알아야 합니다. 프로그램 방식으로 키보드 이벤트를 발생하는 부분과 비슷하므로 같이 다루기로 할게요.

[그림 8.03] 실행화면 및 컨트롤 배치
[그림 8.03] 실행화면 및 컨트롤 배치
 Windows 32 API에서는 프로그램 방식으로 마우스 이벤트를 발생시키는 mouse_event 함수를 제공하고 있습니다.

다음은 프로그램 방식으로 키보드 이벤트를 발생시키는 mouse_event 함수 원형입니다.

여기에서는 키보드의 방향 키를 누르면 프로그램 방식으로 마우스 이벤트를 발생하여 마우스 좌표를 이동하는 예광탄을 만들어 보기로 합시다. 그리고 Home, End, PageUp, PageDown 키를 누르면 왼쪽, 오른쪽, 위, 아래로 10을 이동하게 할 것입니다. 또한 Space를 누르면 왼쪽 마우스 버튼 누름, Tap을 누르면 왼쪽 마우스 뗌, 엔터 키를 누르면 왼쪽 마우스 클릭 이벤트를 발생하게 할 것입니다.

 

먼저 컨트롤을 배치하세요.

 

번호 컨트롤 타입 컨트롤 명 설명
1 ListBox lbox_key 제어 방법 도움말 항목 (Enabled 속성을 False로 설정)
2 ListBox lbox_event 발생한 이벤트 및 좌표 항목(Enabled 속성을 False로 설정)

[표 8.2] Form1의 컨트롤 배치

 

먼저 Windows API를 래핑할 MouseController 클래스를 추가하세요.

 

마우스 이벤트 종류를 열거형으로 정의합시다. 그리고 조합을 사용할 수 있게 Flags 특성을 지정합니다.

mouse_event를 상호 운영할 수 있게 선언합니다.

현재 마우스 좌표를 얻어오는 GetCursorPos도 상호 운영할 수 있게 선언합니다.

원하는 좌표로 마우스 좌표를 설정하는 SetCursorPos도 상호 운영할 수 있게 선언합니다.

 

현재 마우스 좌표를 얻어오는 메서드를 제공합시다.

 

마우스 좌표를 현재 위치에서 상대적인 거리로 이동하는 메서드를 정의합시다.

원하는 x,y 위치로 마우스 좌표를 이동하는 메서드도 제공합시다.

Point 형식을 입력 인자로 받아 마우스 좌표를 이동하는 메서드도 제공합시다.

마우스 왼쪽 버튼 누름 메서드를 제공합시다.

같은 방식으로 마우스 왼쪽 버튼 뗌, 클릭, 더블 클릭 메서드를 구현합니다.

 

[소스 8.3] MouseController.cs

 

이제 Form1 을 작성합시다. 먼저 Form1의 Load 이벤트 핸들러를 등록하세요.

 

Form1의 KeyDown 이벤트 핸드러를 등록하세요.

프로그램 방식으로 마우스 이벤트를 발생시켰을 때마다 마우스 좌표를 얻어와서 lbox_event 항목에 추가합니다.

 

[소스 8.4] Form1.cs