폼개체와마우스이벤트 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 )
2/24 Contents 학습목표 폼개체에서 Load/UnLoad 이벤트의활용을이해하며, 마우스이벤트에서 Button, Shift, X, Y 인수의기능을이해한다. 또한, DragDrop, DragOver 이벤트와 KeyPress 이벤트의활용을학습한다. 그리고 MDI 폼을다룬다. 내용 Unload 이벤트의활용 MouseDown, MouseUp, MouseMove 이벤트의이해와활용 DragDrop, DragOver 이벤트의이해와활용 KeyPress 이벤트 MDI 폼다루기
3/24 폼이벤트 폼이벤트 : 폼이나컨트롤을포함한모든객체가마우스나키보드등의어떤자극을받아이벤트를발생하면이벤트중심 (Event Driven) 의프로시저를발생한다. 폼이벤트의종류는다음과같다. Load 이벤트 Load 이벤트는폼이실행될때수행되는이벤트로, 폼이생성될때 제일먼저발생하며, 폼에사용한컨트롤을초기화할때사용한다.
4/24 폼이벤트 ( 예제 ) Load 이벤트실행프로그램 (99 쪽 ) 1 [Form1] 을더블클릭하여코드창을표시하고, 이벤트목록에서 Load 이벤트를 선택한다. 2 코드창에해당프로시저가나타나면다음과같이입력한다. 3 프로그램을실행하면다음과같은메시지가나온다.
폼이벤트 4 [ 확인 ] 을클릭하면폼이 Load 된다. ( 실습 ) 다음은화면의중심에폼을출력하는코드이다. Private Sub Form_Load() Left = (Screen.Width - Width) / 2 Top = (Screen.Height - Height) / 2 - Width : 폼개체의너비값 - Height : 폼개체의높이값 - Screen.Width : 모니터해상도의너비값 - Screen.Height : 모니터해상도의높이값 실습동영상 (vb12_1.swf) 5/24
6/24 폼이벤트 Unload 이벤트 Unload 이벤트는폼을닫을때발생하는이벤트로일반적으로폼에있는닫기 ( ) 버튼을마우스로눌러프로그램을종료할때발생한다. 이때 Cancel 변수는폼의종료를취소할것인지를결정할때사용한다. Cancel 변수가 0 이면메모리에서폼을제거하고닫는다. Private Sub Form_Unload(Cancel As Integer).. Cancel = 0
7/24 폼이벤트 ( 실습 ) 폼 ( 창 ) 의종료버튼을누르면 정말프로그램을종료하시겠습니까? 라는 메시지박스를출력하도록프로그램을작성하시오. Private Sub Form_Unload(Cancel As Integer) Dim Message As Integer Message = MsgBox(" 정말프로그램을종료하시겠습니까?", _ vbexclamation + vbyesno, " 종료확인 ") Select Case Message Case vbyes Cancel = 0 Case vbno Cancel = 1 End Select 실습동영상 (vb12_2.swf)
8/24 마우스이벤트 마우스이벤트 윈도우응용프로그램은마우스 (mouse) 와키보드 (keyboard) 를사용하여 사용자인터페이스한다. 이벤트 Click 설명 폼이나컨트롤내부를한번클릭하면발생하는이벤트 : 객체명 _Click() DbClick 폼이나컨트롤내부를두번클릭하면발생하는이벤트 : 객체명 _DbClick() MouseDown 마우스를누를때발생하는이벤트 : 객체명 _MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseUp 마우스를눌렀다놓았을때발생하는이벤트 : 객체명 _MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseMove 마우스를옮길때발생하는이벤트 : 객체명 _MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
9/24 마우스이벤트 MouseDown, MouseUp, MouseMove 이벤트의인수는다음과같다. 인수 설명 Button Shift 마우스의버튼의상태 1 (vbleftbutton) : 왼쪽버튼누름 2 (vbrightbutton) : 오른쪽버튼누름 4 (vbmiddlebutton) : 가운데버튼누름 Shift 키, Ctrl 키, Alt 키 (1 : Shift, 2 : Ctrl, 4 : Alt 키를의미, Shift 와 Alt 키를같이누르면 Shift 값은 5 가된다.) X, Y 마우스포인터의현재위치 ( 실습 ) 마우스버튼이벤트프로그램 폼을더블클릭하여코드창의이벤트목록에서 MouseDown 이벤트를선택
10/24 마우스이벤트 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Button Case 1 Label1.Caption = " 왼쪽버튼을눌렀군요!" Case 2 Label1.Caption = " 오른쪽버튼을눌렀군요!" End Select Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Button Case vbleftbutton Label1.Caption = " 왼쪽버튼을눌렀군요!" Case vbrightbutton Label1.Caption = " 오른쪽버튼을눌렀군요!" End Select 실습동영상 (vb12_3.swf)
11/24 마우스이벤트 ( 실습 ) Shift 인수를사용하여 Shift, Ctrl, Alt 키를눌렀는지를알아보자. Shift 값 상수 의미 1 vbshiftmask Shift키를누름 2 vbctrlmask Ctrl키를누름 3 vbshiftmask + vbctrlmask Shift키와 Ctrl키를누름 4 vbaltmask Alt키를누름 5 vbshiftmask + vbaltmask Shift키와 Alt키를누름 6 vbctrlmask + vbaltmask Ctrl키와 Alt키를누름 7 vbctrlmask + vbaltmask + vbshiftmask Shift키, Ctrl키, Alt키를누름
12/24 마우스이벤트 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Shift Case vbshiftmask Label1.Caption = "Shift 키를눌렀군요!" Case vbctrlmask Label1.Caption = "Ctrl 키를눌렀군요!" Case vbshiftmask + vbctrlmask Label1.Caption = "Shift, Ctrl 키를눌렀군요!" Case vbaltmask Label1.Caption = "Alt 키를눌렀군요!" Case vbshiftmask + vbaltmask Label1.Caption = "Shift, Alt 키를눌렀군요!" Case vbctrlmask + vbaltmask Label1.Caption = "Ctrl, Alt 키를눌렀군요!" Case vbctrlmask + vbaltmask + vbshiftmask Label1.Caption = "Ctrl, Shift, Alt 키를눌렀군요!" End Select 실습동영상 (vb12_4.swf)
13/24 마우스이벤트 ( 실습 ) 다음그림과같이폼에서마우스를움직일때마다마우스의 X, Y 좌표값을 출력하는프로그램을작성하자. Private Sub Form_Load() lblx.caption = "" lbly.caption = "" 실습동영상 (vb12_5.swf) Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) lblx.caption = X lbly.caption = Y
14/24 마우스이벤트 ( 실습 ) 다음과같이폼에마우스를움직여그림을그리는그림판프로그램을작성하자. 1 선의굵기를 HscrollBar(2) 를이용하여입력받는다. ( 굵기 : 1 ~ 10) 이때입력된값이 Label컨트롤 (3) 에표시되도록한다. 2 선색상은 3개의 HscrollBar(5,6,7) 를이용하여 R, G, B값을받아들여 RGB함수로 HscrollBar를조절할때마다 Shape객체 (4) 에서색상을미리볼수있도록한다. 3 마우스의왼쪽마우스버튼을눌러움직이면라인이그려지도록한다.
15/24 마우스이벤트 1 2 5 6 7 3 4 8 9 10 11 객체 컨트롤이름 속성 속성값 1 Picture1 DrawStyle 1 DrawWidth 1 2 Hscroll1 3 lbldraw Caption 1 4 Shape1 FillStyle 0 FillColor vbblack 5 hsbred Max 255 객체 컨트롤이름 속성 속성값 6 hsbblue Max 255 7 hsbgreen Max 255 8 lblred Caption 0 9 lblblue Caption 0 10 lblgreen Caption 0 11 cmderase Caption 지우기
16/24 마우스이벤트 Dim CheckMouse As Boolean Private Sub Form_Load() lbldraw.caption = "1" lblred.caption = "0" lblblue.caption = "0" lblgreen.caption = "0" Shape1.FillStyle = 0 Shape1.FillColor = vbblack HScroll1.Min = 1: HScroll1.Max = 10 hsbred.max = 255 hsbblue.max = 255 hsbgreen.max = 255 Picture1.DrawWidth = 1 Picture1.DrawStyle = 1 Private Sub cmderase_click() Picture1.Picture = LoadPicture("") Private Sub cmdexit_click() End ( 다음에계속 )
17/24 마우스이벤트 Private Sub HScroll1_Change() lbldraw.caption = HScroll1.Value Picture1.DrawWidth = HScroll1.Value Private Sub hsbred_change() lblred.caption = hsbred.value Shape1.FillColor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value,) Picture1.ForeColor = Shape1.FillColor Private Sub hsbgreen_change() lblgreen.caption = hsbgreen.value Shape1.FillColor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value) Picture1.ForeColor = Shape1.FillColor Private Sub hsbblue_change() lblblue.caption = hsbblue.value Shape1.FillColor = RGB(hsbRed.Value, hsbgreen.value, hsbblue.value) Picture1.ForeColor = Shape1.FillColor ( 다음에계속 )
마우스이벤트 Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Picture1.CurrentX = X Picture1.CurrentY = Y If Button = vbleftbutton Then CheckMouse = True End If Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If CheckMouse Then Picture1.Line -(X, Y) End If Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) CheckMouse = False 실습동영상 (vb12_6.swf) 18/24
19/24 DragOver/DragDrop 이벤트 DragOver / DragDrop 이벤트 이벤트 DragOver 설명 마우스로컨트롤을끌어다른컨트롤의위를지나는경우발생하는이벤트 Private Sub 객체이름 _DragDrop(Source As Control, X As Single, Y As Single) DragDrop 마우스를끌어놓기가완료될때발생하는이벤트 Private Sub 객체이름 _DragOver(Source As Control, X As Single, Y As Single, State As Integer) ( 실습 ) 마우스의모양바꾸기 텍스트박스컨트롤을픽처박스컨트롤위로끌어오면마우스포인터모양이다른모양으로 바뀌고, 다른곳으로끌어다놓으면원래의모양으로되돌아온다. 실습동영상 (vb12_7.swf)
20/24 DragOver/DragDrop 이벤트 Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) Picture1.BackColor = vbred Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) Select Case State Case vbenter Source.DragIcon = LoadPicture("C:\Program Files\Microsoft Visual Studio\COMMON\Graphics\Icons\Arrows\POINT04.ICO") Case vbleave Source.DragIcon = LoadPicture() End Select 구성요소 Source State 설명 끌기대상컨트롤. 이인수를사용해서이벤트프로시저의속성과메소드를참조. ( 예 : Source.Visual = False) 대상폼이나컨트롤에관한대상컨트롤의이동상태를대응하는정수 0 = Enter ( 원본컨트롤을대상범위안으로끌어놓음 ) 1 = Leave( 원본컨트롤을대상범위밖으로끌어놓음 ) 2= Over( 원본컨트롤을대상내의다른대상으로이동 )
21/24 키보드이벤트 키보드이벤트 이벤트 KeyDown KeyUp KeyPress 설명 키보드의키상태를알려주는이벤트로사용자가키를누를때발생하는이벤트 키보드의키상태를알려주는이벤트로사용자가키에서손을떼면발생하는이벤트 KeyDown/KeyUp 이벤트와달리키보드의상태를알려주지못하고, 단지키가나타내는문자만을표시한다. KeyDown 과 KeyUp 이벤트구문의구성요소 구성요소 Keycode Shift 설명 vbkeyf1(f1 키 ) 이나 vbkeyhome(home 키 ) 같은키코드 Shift, Ctrl, Alt 키가눌려진상태에해당하는정수. Shift 키 : 1, Ctrl 키 : 2, Alt 키 : 4 KeyPress 이벤트구문의구성요소 구성요소 KeyAscii 설명 누른문자의 ASCII 코드를반환 KeyAscii 를 0 으로하면개체가문자를받지못하므로키입력이취소된다.
22/24 키보드이벤트 ( 실습 ) 다름그림과같이텍스트박스에입력된문자를대문자로변경하도록 만들어보자. 실습동영상 (vb12_8.swf) Private Sub Text1_KeyPress(KeyAscii As Integer) Char = Chr(KeyAscii) Text1.Text = " -> " & UCase(Char) Chr( 문자코드 ) 함수 : 문자코드에해당하는문자를반환하는함수 Ucase( 문자열 ) 함수 : 문자열을대문자로변환하여반환하는함수
23/24 MDI 폼배우기 응용프로그램의사용자인터페이스모양 : - 단일문서인터페이스 (SDI, Single Document Interface) - 다중문서인터페이스 (MDI, Multiple Document Interface) SDI 는단일폼으로독립적으로사용되며, 메모장이나워드패드처럼문서를 하나만열수있어서다른문서를열려면이미열려놓은문서를닫아야하는 경우를말한다. MDI 는한글, 엑셀등과같은프로그램처럼하나의폼안에여러폼을 포함할수있는것으로개별창마다다른문서를동시에열수있다. MDI 는다중문서인터페이스로컨테이너폼하나에있는여러폼을관리하는 응용프로그램을만들수있다.
24/24 MDI 폼배우기 ( 실습 ) MDI 폼과자식폼만들기 1 [ 프로젝트 ]-[MDI 폼추가 ] 메뉴를선택한다. 2 MDI 폼추가대화상자가나타나면 MDI 폼 항목을선택하고, 열기 (Open) 버튼을누른다. 3 MDI 폼은일반폼과는달리배경이진한색으로표시된다. 4 자식폼 (Child Form) 을만든다. 선택한폼 (Form1) 의 MDIChild 속성을 True로설정한다. 자식폼 일반폼 MDI 폼 실습동영상 (vb12_9.swf)
윈도우즈프로그래밍 (1) ( 담당교수 : 박호균 )