1 / 18

Windows Programming 제대로 배우기

Windows Programming 제대로 배우기. Chapter 8. Mouse Event Details. 학습 목표. 마우스를 이용한 다양한 이벤트 처리기법 학습. Mouse 의 위치 정보. lParam - 마우스가 눌려졌을 경우에 어느 부분이 눌려졌다는 정보를 기록하는 변수 32 비트 LONG 형 마우스 정보를 입력하여 정보를 알려주게 됨 상위 16 비트 : Y 좌표 하위 16 비트 : X 좌표 LOWORD, HIWORD 32 비트를 16 비트로 나누어주는 함수

crevan
Download Presentation

Windows Programming 제대로 배우기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Windows Programming제대로 배우기 Chapter 8. Mouse Event Details

  2. 학습 목표 마우스를 이용한 다양한 이벤트 처리기법 학습

  3. Mouse의 위치 정보 lParam - 마우스가 눌려졌을 경우에 어느 부분이 눌려졌다는 정보를 기록하는 변수 • 32비트 LONG형 • 마우스 정보를 입력하여 정보를 알려주게 됨 • 상위 16비트 : Y 좌표 • 하위 16비트 : X 좌표 LOWORD, HIWORD • 32비트를 16비트로 나누어주는 함수 int y=HIWORD(lParam) int x=LOWORD(lParam)

  4. POINT p; case WM_RBUTTONDOWN: p.x=LOWORD(lParam); p.y=HIWORD(lParam); // Do something with POINT p …. break;

  5. 예제 : MousePoint • 왼쪽 마우스가 눌리는 위치에 적당한 크기의 원을 그림 • 마우스 위치가 다른 곳에 눌리면 원은 다른 위치에 출력 • 힌트 : 마우스가 눌리는 Point를 기준으로 상,하,좌,우 반경의 원을 만들어 출력

  6. // 필요 데이터 설정 : 원이 그려질 영역과 색 지정 // 윈도우 영역의 가운데 점을 얻음 // 위의 점을 얻은 후 그 위치에 따라 반경 50의 원 영역 만들기 // 마우스가 눌려진 위치를 얻음 // 마우스 위치에 따라 반경 50 Pixel로 m_Rect를 변경 // Paint 메시지 호출

  7. Overload

  8. 예제 : MousePoint2 • 앞의 예제에 추가적으로 다음을 구현 • 마우스 오른쪽 버튼이 원의 내부에 클릭되면 원의 색을 다른색으로 바꿈 • 힌트 : 특정 영역 내에 마우스 Point가 클릭되었는 가에 대한 검사는 PtInRect(CONST RECT *lprc, POINT pt); 함수 사용

  9. // 필요 데이터 설정 : 원의 색을 2가지로 해야 하기 때문 // 두 가지 색 중 어떤 색을 사용할 것인지를 결정하는 flag // 두 가지 색 초기화 // 변경될 색 변수 // 마우스 오른쪽 버튼에 대한 메시지를 처리 // 마우스 포인트를 p에 얻어온 뒤, 다음과 같이 그 Point가 // 영역 m_Rect내부에 클릭되었는 지 검사하여 // Flag를 toggle시킨 후 Paint메세지 호출

  10. 예제 : Catch Me • 적당한 간격으로 임의의 위치를 발생시켜 원을 나타내는 프로그램 작성 • 이때 원의 내부를 마우스로 클릭하면, HitCount를 증가하고, 화면에 Count를 표시함 • 2.5초 간격으로 원의 움지임을 점점 빠르게 하고, 1분 30초 뒤에 프로그램을 종료 • 종료시까지의 Count를 메시지 박스로 출력하여 표시

  11. 힌트 : (1) Rand함수 사용 • rand()함수를 2번 사용하여 x와 y위치를 각각 만듬 (2) MessageBox함수 사용

  12. MessageBox() • 프로그램 실행 중 간단한 사용자 입력이 필요한 경우 주로 MessageBox를 띄워서 사용자에게 Yes, No, OK, Cancel 등을 물음 • 메시지 박스는 메시지와 타이틀, 조합하여 사용할 수 있는 미리 정의된 Icon과 Button을 포함하는 간단한 사용자 입력 다이얼로그 제공함 • int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType); // style of message box

  13. uType은 Button의 종류와 Icon의 종류를 선택하여 조합

  14. 반환되는 Return값은 다음과 같이 지정한 Icon에 따라 결정됨

  15. // 윈도우 전체 영역을 보관할 변수 // 만들어질 원과 관련된 정보 : 원을 그리게 될 영역, 색, Hit 된 카운드 변수 // 원의 발생 속도를 점점 빠르게 할 때 사용되는 변수 // 화면에 마우스 위치를 표시하기 위한 스트링 변수 // 윈도우 영역 Bound의 가운데 중심점 얻기 // 위의 중심점으로 반경 50의 원 영역 초기화 // 칼라, 카운트 초기화 // 마우스 위치 출력 // 3개의 타이머 설정 // 타이머 1 : m_nSpeed의 주기로 셋팅 // 타이머 2 : 2.5초 (1번 타이머의 주기를 바꾸기 위한 타이머) // 타이머 3 : 1분 30초

  16. // 원의 위치 랜덤 생성 // 2번 타이머 - 2.5초 간격으로, 1번 타이머의 // 주기를 점점 빠르게 만든다 // 3번 타이머 – 1분 30초 후에 //메시지 박스 띄우고 종료 준비

  17. 1번 타이머 WM_PAINT DATA m_Rect m_Color m_szPos Data를 출력한다 Data를 변경하고 WM_TIMER

  18. // 원 안에 마우스 포인트가 들어있으면, count 증가

More Related