4-2 마우스(Mouse)
마우스 이벤트
Click 이벤트
마우스 버튼이 눌렸다가 떼어질 때 발생
DblClick 이벤트
마우스 버튼이 두 번 눌렸다가 떼어질 때 발생
MouseDown 이벤트
마우스 버튼이 눌렸을 때 발생
MouseUp 이벤트
마우스 버튼이 떼어질 때 발생
MouseMove 이벤트
마우스가 움직일 때 발생
DragOver 이벤트
마우스 버튼을 누른 상태에서 끌기를 했을 때 발생
DragDrop 이벤트
마우스 끌기를 하고 누른 버튼을 놓았을 때 발생
4-2 마우스(Mouse)
마우스 관련 메소드
Line 메소드
한 객체 위에 선이나 사각형을 그린다.
(x1, y1)은 시작점을 의미하며, (x2, y2)는 종료점을 의미하는데 종료점 -(x2, y2)만 기술하면 시작점은 CurrentX와 CurrentY가 된다.
CurrentX와 CurrentY는 먼저 그려진 선의 종료점을 가리킨다.
처음 사용하는 선인데 (x2, y2)만 기술하게되면 CurrentX와 CurrentY의 값은 (0, 0)이 된다.
객체.Line [Step] (x1, y1) [Step] (x2, y2), [color], [B][F]
4-2 마우스(Mouse)
마우스 관련 메소드
Move 메소드
한 객체를 특정위치까지 이동시킴
left와 top은 객체의 위치를 나타냄
width와 heiht는 객체의 크기를 나타냄
객체를 끌어다 놓기를 할 때 유용하게 사용
Drag 메소드
Line, Menu, Shape, Timer, CommonDialog 컨트롤을 제외한 컨트롤들 의 끌어놓기 작업을 시작하고, 끝내고, 취소시키는 작업을 함
동작값으로는 끌어놓기 작업을 취소하는 vbCancel인 0값과 끌어놓기를 시작하는 vbBeginDrag 인 1값 그리고 끌어놓기를 끝내는 vbEndDrag인 2값을 갖음
단, Drag 메소드를 사용할 때는 사용하려는 컨트롤의 DragMode속성이
“0 - 수동”으로 되어 있어야함
객체.Move left, top, width, height
객체.Drag 동작값
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-2
마우스를 이용하여 화면에 일반적인 선을 그려봄
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-2
“선 그리기 예제 1” 프로그램은 폼위에서 마우스 버튼을 누를 때마다 즉, MouseDown 이벤트가 발생했을 때 눌린 위치까지 선을 그리는 동작을 한다. 이 프로그램에 쓰인 컨트롤은 폼 자체 밖에 없으며, 그 폼에 설정 된 속성과 코드는 다음과 같다.
frmLine1의 속성
속성 속성값
(Name) frmLine1 Caption 선 그리기 예제 1
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-2
마우스 버튼이 눌렸을 때 실행되는 코드
이제 프로그램을 작동시켜보자 잘 작동하는가?
프로그램 오른쪽 상단의 최소화 버튼을 눌렀다가 다시 활성화 시켜보자.
지금까지 그렸던 선들이 없어진 것을 확인 할 수 있다.
이는 프로그램이 최소화되면서 선들이 가지고 있던 메모리를 Windows 운영체제에게 반납해버리고 되돌려 받지 못하기 때문이다.
해결하기 위해서는 프로그램 자신만의 화면 메모리 영역을 필요로 하는 데, 비주얼베이직에서는 이를 간단히 해결할 수 있다.
폼의 AutoReDraw 속성을 True로 만들어 준다.
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line -(X, Y) 'Line (CurrentX, CurrentY)-(X, Y) 와 동일 End Sub
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-3
마우스를 자연스럽게 이용하여 선을 나타내어 봄
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-3
“선 그리기 예제 2” 프로그램은 “선 그리기 예제 1” 프로그램과는 달리 마우스가 움직일 때 선을 그린다. 좀 더 분석하면 마우스의 버튼이 눌린 상태에서 움직일 때 선을 그리고 마우스의 버튼을 놓으면 선을 그리지 않는다.
frmLine2의 속성
속성 속성값
(Name) frmLine2 Caption 선 그리기 예제 2
AutoReDraw
True4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-3
마우스 버튼이 눌렸을 때 실행되는 코드
마우스 버튼이 움직일 때 실행되는 코드
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
DrawNow = True '마우스 버튼이 눌리면 True로 설정
'현재의 마우스 위치를 기억 CurrentX = X
CurrentY = Y End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If DrawNow Then '마우스 버튼이 눌렸는지 체크
'기억된 위치부터 선과 원을 그림 Line -(X, Y)
Circle (X, Y), 50 End If
End Sub
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-3
마우스 버튼이 떼어질 때 실행되는 코드
폼의 일반선언부에 선언될 변수
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
DrawNow = False '마우스 버튼이 놓이면 False로 설정 End Sub
Dim DrawNow As Boolean '마우스의 상태를 기억하는 전역(Public)변수 선언
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-4
사용자가 마우스를 폼위의 아이콘을 끌어다 놓았을 때 그 위치로 아이콘 이 이동하는 동작을 나타내는 프로그램을 작성
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-4
Drag & Drop 예제에 사용된 컨트롤
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-4
속성표
폼위의 아이콘을 마우스로 끌어다 놓았을 때 실행되는 코드
컨트롤 이름 컨트롤 종류 사용된속성
frmDrag 폼 (Name) = frmDrag
Caption = Drag & Drop 예제 imgDrag 이미지
(Name) = imgDrag DragMode = 1 - 자동 Picture = Drag1pg.ico
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X, Y 'Source 는 현재 이벤트에 사용중인 컨트롤이름 'Source 즉, imgDrag객체를 DragDrop된 위치에 이동 End Sub
4-2 마우스(Mouse)
마우스 관련 메소드
실습 4-4
이 프로그램은 드래그 시키려는 객체의 DragMode 속성을 “1 - 자동”으 로 설정해야 한다. 만일 DragMode속성을 “0 - 수동”으로 설정하면 이 프로그램은 제대로 동작하지 않는다. 이때는 Drag 메소드를 이용해 코 딩하여야한다.
imgDrag 컨트롤의 DragMode 속성이 “0 - 수동”으로 설정되어 있을 경우 다음의 코드를 imgDrag 컨트롤의 MouseDown 이벤트에 추가시킨다.
Private Sub imgDrag_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
imgDrag.Drag 'imgDrag 컨트롤 위에서 마우스 버튼을 눌렀을 경우 _ 드래그 를 시작
End Sub
4-3 MDI(Multiple Document Interface)
지금까지는 하나의 폼에서만 프로그램을 작성
SDI (Single Document Interface) 형태의 프로그램이었다. SDI 란 하나의 문서를 가지는 형태를 말한다.
MDI의 의미
여러 개의 폼을 포함하는 형태
메뉴를 포함하는 문서 편집기 프로그램
실습 4-5
실습 4-2, 4-3, 4-4의 예제를 MDI 형태로 묶어서 별도의 메뉴 프로그 램을 작성
4-3 MDI(Multiple Document Interface)
MDI 폼 추가
MDI 폼 추가하기 위한 순서
먼저 각 폼을 실행시키는 폼 즉, MDI 형태의 폼을 만들어야 한다.
“프로젝트” 메뉴에서 “MDI 폼 추가” 항목을 선택
4-3 MDI(Multiple Document Interface)
MDI 폼 추가
MDI 폼 추가하기 위한 순서
“MDI 폼 추가” 항목을 선택하면 다음의 대화상자가 나타나는데 “열기”
를 선택한다.
4-3 MDI(Multiple Document Interface)
MDI 폼 추가
MDI 폼 추가하기 위한 순서
이제 MDI 형태의 폼이 만들어지며, 프로젝트 윈도우에서 확인가능
4-3 MDI(Multiple Document Interface)
MDI 폼 추가
“마우스 처리 프로그램”의 컨트롤과 속성지정
폼 frmMDI 의 속성
4-3 MDI(Multiple Document Interface)
속성이름 속성값
(Name) frmMDI
Caption 마우스 처리 프로그램
MDI 폼 추가
“마우스 처리 프로그램”의 컨트롤과 속성지정
메뉴 에디트 컨트롤의 속성
메뉴에 “&”문자를 표현하려면 “&”문자 앞에 똑같이 “&”를 연속해서 지정 해야한다. 이유는 “&”문자가 메타문자이기 때문이다.
4-3 MDI(Multiple Document Interface)
SDI 폼 추가
별도의 SDI 폼을 추가하기 위한 순서
MDI 폼과 마찬가지로 “프로젝트” 메뉴에서 선택하지만 “폼 추가” 항 목을 선택해야 한다.
마찬가지로 대화상자가 나타나는데 다음과 같다.
4-3 MDI(Multiple Document Interface)
SDI 폼 추가
별도의 SDI 폼을 추가하기 위한 순서
여기서 “열기”를 선택해서 폼을 작성할 수도 있지만 이미 예제 프로그 램들을 작성했으므로 대화상자에서 왼쪽 상단의 “기존 파일” 탭을 선 택하고 나면 다음의 대화상자로 변한다.
4-3 MDI(Multiple Document Interface)
SDI 폼 추가
별도의 SDI 폼을 추가하기 위한 순서
여기서 추가할 폼 파일을 선택
선택할 폼 파일은 “frmDrag.frm”, “frmLine1.frm”, “frmLine2.frm”들 로 구성되어 있으며 같은 방법으로 세 개의 폼을 추가하고 이를 프로젝 트 윈도우에서 확인
메인으로 실행할 폼을 선택해 주어야 하는데 “프로젝트” 메뉴에서 “속 성” 항목을 선택해서 설정
4-3 MDI(Multiple Document Interface)
SDI 폼 추가
별도의 SDI 폼을 추가하기 위한 순서
“Project1 속성” 항목을 선택하면 다음의 대화상자를 볼 수 있는데 “시 작 개체”란 콤보 박스에서 “frmMDI”를 선택
4-3 MDI(Multiple Document Interface)
SDI 폼 추가
별도의 SDI 폼을 추가하기 위한 순서
“마우스 처리” 프로그램 실행화면을 보면 각 예제 프로그램들이 MDI 폼안에서만 움직인다. 다른 말로 표현하면 폼 “frmMDI”는 부모 윈도 우이고 각 예제 폼들은 자식 윈도우들이다.
부모 윈도우가 자식 윈도우를 생성하고 자식 윈도우는 부모 윈도우 안에 서 작동하는 것이다. 이렇게 작동을 하게 하려면 각 예제 폼들을 자식 윈 도우로 설정해야 하는데 그 방법으로는 다음과 같이 자식으로 생성될 폼 들의 속성을 변경한다.
4-3 MDI(Multiple Document Interface)
코드 프로시저 작성
“파일” 메뉴에서 “선그리기 1 ” 항목을 선택했을 때
4-3 MDI(Multiple Document Interface)
Private Sub mnuLine1_Click()
frmLine1.Show '폼 frmLine1을 보여줌 End Sub
코드 프로시저 작성
“파일” 메뉴에서 “선그리기 2 ” 항목을 선택했을 때
4-3 MDI(Multiple Document Interface)
Private Sub mnuLine2_Click()
frmLine2.Show '폼 frmLine2를 보여줌 End Sub
코드 프로시저 작성
“파일” 메뉴에서 “Drag & Drop ” 항목을 선택했을 때
4-3 MDI(Multiple Document Interface)
Private Sub mnuDrag_Click()
frmDrag.Show '폼 frmDrag를 보여줌 End Sub