마우스 메시지 처리 기법을 익힌다. 키보드 메시지 처리 기법을 익힌다..

Slides:



Advertisements
Similar presentations
1/ 편집 기능 사용하기 – 실습 1 글자 모양을 바꾸고 싶은 곳을 블록 설정 [ 글자 모양 ] 대화 상자에서 [ 글꼴 ] ‘ 궁서체 ’, [ 글자 색 ] ‘ 토마토색 ’ 으로 선택 → [ 설정 ] 클릭 → 글자 모양 변경.
Advertisements

가족 문화 정보 한마당 대단원 1 – 중단원 4 영진.COm영진.COm 1. 마음이 담긴 쪽지 쓰기  워드 프로세서 (Word processor)  문서를 작성하고 편집 · 출력할 수 있는 프 로그램  워드 프로세서의 기능  문서의 입력 기능  문서의 편집.
Timer Department of Digital Contents Sang Il Park.
Keyboard Input. Announcement 휴강공고 : –4 월 12 일 ( 월요일 ) 수업 없음 – 보강일정 : 차후 공고 예정.
MS 워드 2007 기초 사용법 MS 워드 2007 시작하기와 종료 MS 워드 2007 화면의 구성요소 MS 워드 2007 단축키 ( 기초 ) MS 워드 2007 표 그리기 MS 워드 2007 화일변환.
메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Message Process for SDI Chung-Buk HRD Institute of KCCI Dept. of Information & Communication PhD. Kang, Won-Chan.
Department of Digital Contents Sang Il Park
Windows Function Windows XP Windows 7 Windows 8 FREE 조장 : 김동환 조원 : 전태우
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
2장. 윈도우즈 입출력 1/211 1.

목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
제 7 장 함수 사용을 통해 엑셀 정복하기.
MFC Application Frameworks (AFX)
149개의 실습예제로 배우는 Flash 8.
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
MFC의 메시지 처리.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Chapter 10. AWT 이벤트.
5.2 애니메이션 Page 283 ~ 295.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
1장. 실습 환경 구축.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
DPR-1630&1615 IP공유기 셋팅 방법 고객지원팀 작성자 : 정청석.
옐로우캡 TSC 드라이버 설치방법.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
MFC 프로그래밍에 관한 팁 / Keyboard
Visual C++ Programming Keyboard & Timer
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
5장. 마우스와 키보드.
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Visual C++ Programming Menu
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
주의할 점!!!! 1. 문자 쓸 때 문자 틀 글자 크기에 맞추기 2. 색 보정할 때 Colorize 체크하고 /
홀인원2.0 설치 메뉴얼.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
24장. 파일 입출력.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Excel 일차 강사 : 박영민.
연산자 (Operator).
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
1차시: 낮과 밤이 생기는 원리 지구과학
스위시 맥스2 이미지 갤러리 만들기 아래 그림이 스위시 맥스2로 만들 이미지 갤러리 이다.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
컴퓨터활용능력1급필기 06 PC 운영체제(2) Windows 탐색기 제어판 인쇄.
파워포인트 단축키 모음 범주 명령/기능 단축키 오피스 공통 단축키 파일 열기 Ctrl + O O 열려진 창들 간의 전환
01. DHCP의 개념 조직의 네트워크에 연결되어 있는 워크스테이션의 TCP/IP 설정을 자동화하기 위한 표준 프로토콜
단축키 기능 1. 단축키 기능 설명 Alt + R 조회 S 저장 I 삽입 A 추가 D 삭제 P 출력 Q 닫기
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
컴퓨터 구성요소와 사용 컴퓨터 문서 작업 인터넷 활용
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
메뉴(Menu) 컴퓨터응용 및 실습 I.
Chapter 02. 윈도우 소켓 시작하기.
JSP Programming with a Workbook
9 브라우저 객체 모델.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
숙제 작성 및 제출 과정 김진하 2008/03/14.
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
CHAP 5. 메뉴와 대화상자.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

마우스 메시지 처리 기법을 익힌다. 키보드 메시지 처리 기법을 익힌다.

마우스 기초 (1/2) 마우스 처리 윈도우 운영체제는 마우스와 관련된 모든 변화를 메시지 형태로 프로그램에게 전달한다. 마우스 장치 드라이버 시스템 메시지 대기열 응용 프로그램 핸들러 루프

마우스 기초 (2/2) 마우스 메시지 전달 마우스 메시지는 마우스 커서 밑에 있는 윈도우가 받는다. 마우스 메시지를 프레임 윈도우로 전달 마우스 메시지를 뷰로 전달

클라이언트 영역 마우스 메시지 (1/5) 클라이언트 영역 마우스 메시지 메시지 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE 발생 시점 왼쪽 버튼을 누를 때 왼쪽 버튼을 뗄 때 왼쪽 버튼을 더블 클릭할 때 가운데 버튼을 누를 때 가운데 버튼을 뗄 때 가운데 버튼을 더블 클릭할 때 오른쪽 버튼을 누를 때 오른쪽 버튼을 뗄 때 오른쪽 버튼을 더블 클릭할 때 마우스를 움직일 때

클라이언트 영역 마우스 메시지 (2/5) 클라이언트 영역 마우스 메시지 핸들러 메시지 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE 메시지맵 매크로 ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_LBUTTONDBLCLK() ON_WM_MBUTTONDOWN() ON_WM_MBUTTONUP() ON_WM_MBUTTONDBLCLK() ON_WM_RBUTTONDOWN() ON_WM_RBUTTONUP() ON_WM_RBUTTONDBLCLK() ON_WM_MOUSEMOVE() 메시지 핸들러 OnLButtonDown OnLButtonUp OnLButtonDblClk OnMButtonDown OnMButtonUp OnMButtonDblClk OnRButtonDown OnRButtonUp OnRButtonDblClk OnMouseMove

클라이언트 영역 마우스 메시지 (3/5) 메시지 핸들러 형태 nFlags 메시지가 생성될 때의 키보드나 마우스 버튼의 상태를 나타내는 비트 매스크 afx_msg void On* (UINT nFlags, CPoint point) ; 비트 매스크 의미 MK_CONTROL Ctrl 키가 눌렸을 때 MK_SHIFT Shift 키가 눌렸을 때 MK_LBUTTON 마우스 왼쪽 버튼이 눌렸을 때 MK_MBUTTON 마우스 가운데 버튼이 눌렸을 때 MK_RBUTTON 마우스 오른쪽 버튼이 눌렸을 때

클라이언트 영역 마우스 메시지 (4/5) 메시지 핸들러 형태 (cont'd) 예 1 point 메시지가 생성될 때의 마우스 커서 위치(클라이언트 좌표) 예 1 void CChildView::OnLButtonDown(UINT nFlags, CPoint point) { if(nFlags & MK_SHIFT){ // 만약 Shift 키가 눌렸다면 ... } CWnd ::OnLButtonDown(nFlags, point);

클라이언트 영역 마우스 메시지 (5/5) 예 2 void CChildView::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC dc(this); dc.SetMapMode(MM_LOMETRIC); CPoint pt = point; dc.DPtoLP(&pt); dc.Rectangle(pt.x-100, pt.y+100, pt.x+100, pt.y-100); CWnd ::OnLButtonDown(nFlags, point); }

마우스 캡쳐 용도 관련 함수 마우스 캡처를 하면 마우스 커서의 위치에 관계없이 마우스 메시지를 받을 수 있다. API 함수 MFC 함수 의미 SetCapture() CWnd::SetCapture() 마우스 캡처를 시작한다. ReleaseCapture() 없음 마우스 캡처를 해제한다. GetCapture() CWnd::GetCapture() 어느 윈도우가 현재 마우스 캡처를 하고 있는지 알아낸다.

비 클라이언트 영역 마우스 메시지 (1/4) 비 클라이언트 영역 마우스 메시지 메시지 발생 시점 WM_NCLBUTTONDOWN 왼쪽 버튼을 누를 때 WM_NCLBUTTONUP 왼쪽 버튼을 뗄 때 WM_NCLBUTTONDBLCLK 왼쪽 버튼을 더블 클릭할 때 WM_NCMBUTTONDOWN 가운데 버튼을 누를 때 WM_NCMBUTTONUP 가운데 버튼을 뗄 때 WM_NCMBUTTONDBLCLK 가운데 버튼을 더블 클릭할 때 WM_NCRBUTTONDOWN 오른쪽 버튼을 누를 때 WM_NCRBUTTONUP 오른쪽 버튼을 뗄 때 WM_NCRBUTTONDBLCLK 오른쪽 버튼을 더블 클릭할 때 WM_NCMOUSEMOVE 마우스를 움직일 때

비 클라이언트 영역 마우스 메시지 (2/4) 비 클라이언트 영역 마우스 메시지 핸들러 메시지 메시지맵 매크로 메시지 핸들러 WM_NCLBUTTONDOWN ON_WM_NCLBUTTONDOWN() OnNcLButtonDown WM_NCLBUTTONUP ON_WM_NCLBUTTONUP() OnNcLButtonUp WM_NCLBUTTONDBLCLK ON_WM_NCLBUTTONDBLCLK() OnNcLButtonDblClk WM_NCMBUTTONDOWN ON_WM_NCMBUTTONDOWN() OnNcMButtonDown WM_NCMBUTTONUP ON_WM_NCMBUTTONUP() OnNcMButtonUp WM_NCMBUTTONDBLCLK ON_WM_NCMBUTTONDBLCLK() OnNcMButtonDblClk WM_NCRBUTTONDOWN ON_WM_NCRBUTTONDOWN() OnNcRButtonDown WM_NCRBUTTONUP ON_WM_NCRBUTTONUP() OnNcRButtonUp WM_NCRBUTTONDBLCLK ON_WM_NCRBUTTONDBLCLK() OnNcRButtonDblClk WM_NCMOUSEMOVE ON_WM_NCMOUSEMOVE() OnNcMouseMove

비 클라이언트 영역 마우스 메시지 (3/4) 메시지 핸들러 형태 nHitTest point 메시지가 생성될 때의 마우스 커서 위치를 나타내는 상수값  다음 페이지 표 참조 point 메시지가 생성될 때의 마우스 커서 위치(스크린 좌표) 클라이언트 좌표로 변환하려면 CWnd::ScreenToClient() 함수를 사용 afx_msg void OnNc* (UINT nHitTest, CPoint point) ;

비 클라이언트 영역 마우스 메시지 (4/4) nHitTest 상수값 의미 HTCAPTION 타이틀바 HTCLIENT HTCLOSE 종료 버튼 HTHSCROLL 가로 스크롤 바 HTMENU 메뉴 HTMAXBUTTON 또는 HTZOOM 최대화 버튼 HTMINBUTTON 또는 HTREDUCE 최소화 버튼 HTSYSMENU 시스템 메뉴 HTVSCROLL 세로 스크롤 바

마우스 정보와 커서 관리 (1/3) 마우스 정보 마우스 관련 nIndex 값 int GetSystemMetrics (int nIndex) ; nIndex 의미 SM_CMOUSEBUTTONS 마우스 버튼의 개수를 리턴하며 마우스가 설치되지 않은 경우에는 0을 리턴한다. SM_MOUSEPRESENT 마우스의 설치 여부를 TRUE 또는 FALSE로 리턴한다. SM_SWAPBUTTON 왼쪽과 오른쪽 버튼의 의미가 바뀌었으면 TRUE를 리턴한다. SM_MOUSEWHEELPRESENT 휠(Wheel) 마우스이면 TRUE를 리턴한다.

마우스 정보와 커서 관리 (2/3) 커서 바꾸기 hCursor 커서 리소스를 가리키는 핸들값 다음 두 함수의 리턴값을 대입 CWinApp::LoadStandardCursor() CWinApp::LoadCursor() HCURSOR SetCursor (HCURSOR hCursor) ;

마우스 정보와 커서 관리 (3/3) 커서 위치 제한하기 lpRect 커서가 움직일 수 있는 사각형의 범위(스크린 좌표) 커서 움직임의 제한을 없애고자 한다면 lpRect에 NULL값을 사용 BOOL ClipCursor (CONST RECT *lpRect) ;

키보드 기초 (1/2) 키보드 처리 윈도우 운영체제는 키보드와 관련된 모든 변화를 메시지 형태로 프로그램에게 전달한다. 키보드 장치 드라이버 시스템 메시지 대기열 응용 프로그램 핸들러 루프 스캔 코드

키보드 기초 (2/2) 키보드 메시지 전달 키보드 포커스 키보드 메시지는 키보드 포커스를 가진 윈도우가 받는다. 활성 윈도우 또는 활성 윈도우의 자식 윈도우가 가지는 일종의 속성

키보드 포커스 (1/2) 키보드 포커스 유형 캐럿

키보드 포커스 (2/2) 키보드 포커스 변화 Void CMainFrame::OnSetFocus(CWnd* pOldWnd) { WM_SETFOCUS WM_KILLFOCUS WM_SETFOCUS Void CMainFrame::OnSetFocus(CWnd* pOldWnd) { m_wndView.SetFocus(); }

캐럿 (1/2) 관련 함수 함수 이름 역할 CreateCaret() 비트맵을 이용하여 캐럿을 생성한다. CreateGrayCaret() 회색 사각형 모양의 캐럿을 생성한다. CreateSolidCaret() 검정색 사각형 모양의 캐럿을 생성한다. ShowCaret() 캐럿이 보이도록 한다. HideCaret() 캐럿을 숨긴다. GetCaretPos() 캐럿의 위치(클라이언트 좌표)를 얻는다. SetCaretPos() 캐럿의 위치(클라이언트 좌표)를 변경한다. ::DestroyCaret() 캐럿을 파괴한다. ::GetCaretBlinkTime() 캐럿이 깜박이는 간격을 얻는다. ::SetCaretBlinkTime() 캐럿이 깜박이는 간격을 설정한다.

캐럿 (2/2) void CChildView::OnSetFocus(CWnd* pOldWnd) { CWnd ::OnSetFocus(pOldWnd); CreateSolidCaret(20, 20); SetCaretPos(CPoint(50, 50)); ShowCaret(); } void CChildView::OnKillFocus(CWnd* pNewWnd) CWnd ::OnKillFocus(pNewWnd); HideCaret(); ::DestroyCaret();

키 누름 메시지 (1/3) 키 누름 메시지(Keystroke Message) 키 누름 메시지 종류 키보드를 누르거나 떼는 동작에 의해 발생하는 메시지 키 누름 메시지 종류 메시지 의미 WM_KEYDOWN F10, Alt 이외의 키를 누를 때 WM_KEYUP F10, Alt를 이외의 키를 뗄 때 WM_SYSKEYDOWN F10, Alt, Alt + 키 조합을 누를 때 WM_SYSKEYUP F10, Alt, Alt + 키 조합을 뗄 때

키 누름 메시지 (2/3) 메시지 핸들러 형태 nChar nRepCnt nFlags 키에 할당된 가상 키 코드값  다음 페이지 표 참조 nRepCnt 키를 계속 누르고 있을 경우 1보다 큰 값을 가진다. nFlags 키와 관련된 다양한 정보를 담고 있다(MSDN 참조). afx_msg void On* (UINT nChar, UINT nRepCnt, UINT nFlags) ;

키 누름 메시지 (3/3) 가상 키코드 가상 키 코드 VK_CANCEL VK_BACK VK_TAB VK_RETURN VK_SHIFT VK_CONTROL VK_MENU VK_PAUSE VK_CAPITAL VK_ESCAPE VK_SPACE VK_PRIOR VK_NEXT VK_END 해당 키 Ctrl-Break Backspace Tab Enter Shift Ctrl Alt Pause Caps Lock Esc Spacebar PgUp PgDn End VK_HOME VK_LEFT VK_UP VK_RIGHT VK_DOWN VK_SNAPSHOT VK_INSERT VK_DELETE VK_0 - VK_9 VK_A - VK_Z VK_F1 - VK_F12 VK_NUMLOCK VK_SCROLL Home ← ↑ → ↓ Print Screen Insert Delete 0 – 9 A – Z F1 - F12 Num Lock Scroll Lock

문자 메시지 (1/3) 문자 메시지 필요성 - VK_R 키를 누른 경우 ? 문자 가상 키 코드 조합 r 영문 입력 모드에서 VK_R 또는 VK_R + Caps Lock + Shift 키를 누른 경우 R 영문 입력 모드에서 VK_R + Caps Lock 또는 VK_R + Shift 키를 ㄱ 한글 입력 모드에서 VK_R 키를 누른 경우 ㄲ 한글 입력 모드에서 VK_R + Shift 키를 누른 경우

문자 메시지 (2/3) 문자 메시지 - VK_R 키를 누른 경우 문자 메시지 - Alt + VK_R 키를 누른 경우 WM_KEYDOWN WM_CHAR WM_KEYUP WM_SYSKEYDOWN WM_CHAR WM_SYSKEYUP WM_KEYDOWN

문자 메시지 (3/3) 메시지 핸들러 형태 nChar nRepCnt nFlags 키에 해당하는 문자 코드(Character Code) 값을 가진다. nRepCnt 키를 계속 누르고 있을 경우 1보다 큰 값을 가진다. nFlags 키와 관련된 다양한 정보를 담고 있다(MSDN 참조). afx_msg void OnChar (UINT nChar, UINT nRepCnt, UINT nFlags) ; afx_msg void OnSysChar (UINT nChar, UINT nRepCnt, UINT nFlags) ;

목요일 실습 내용 마우스 이벤트를 사용한 선그리기 키보드 이벤트를 사용 첫번째 두번째 첫번째 마우스 클릭에서 시작 두번째 마우스 클릭에서 끝 두번째 왼쪽 마우스 클릭 시작 오른쪽 마우스 클릭 끝 키보드 이벤트를 사용