[MFC] Mouse Message (마우스 메시지)

0. 목표
- 마우스 왼쪽 버튼을 누르면 디지털 타이머 시작, 또는 예외 메시지
- 마우스 오른쪽 버튼을 누르면 디지털 타이머 해제(메시지박스로 물어본 후)


timer의 on / off 체크용 
boolean member variable(불리언 타입 멤버 변수) m_bTimerRun 을 선언한다.
(이건 당연히 view 클래스에)

1. 마우스 왼쪽 클릭 이벤트
- WM_LBUTTONDOWN

메시지 핸들러 함수에 코드 추가
// TODO: Add your message handler code here and/or call default
if(!m_bTimerRun)
{
SetTimer(0, 1000, NULL); // timer setting
m_bTimerRun = true; // timer performance true
}
else 
{
AfxMessageBox("디지털 시계가 이미 동작중입니다.");
}





2. 마우스 오른쪽 클릭 이벤트
- WM_RBUTTONDOWN

메시지 핸들러 함수에 코드 추가
if(!m_bTimerRun)
{
AfxMessageBox("디지털 시계가 이미 동작 안함");
}
else
{
if(AfxMessageBox("정말로 시계 멈출겨?", MB_YESNO | 
MB_ICONQUESTION) == IDYES)
{
KillTimer(0); // ID가 0인 타이머 해제
m_bTimerRun = false; // 타이머 동작 false
}
}



3. 타이머 메시지 이벤트
- WM_TIMER

메시지 핸들러 함수에 코드 추가
CClientDC dc(this); // 현재 클라이언트 영역 DC 얻음
CTime timer; // 타이머 변수 선언
timer = CTime::GetCurrentTime(); // 현재 시간을 얻음
CString strTimer; // 현재 시간을 출력할 문자열 변수
strTimer = timer.Format("현재시간 : %H시 %M분 %S초"); // 시간형식으로 문자열 생성
dc.TextOut(0, 0, strTimer); // 현재시간을 윈도우 좌표 0, 0에 출력





실행 결과











Mouse message, message handler function
 메시지 유형 이벤트 메시지 핸들러 펑션 
 WM_MOUSEMOVE 마우스 이동 OnMouseMove() 
WM_LBUTTONDBCLK    왼쪽 마우스 버튼 더블클릭  OnLButtonBdlClk()
WM_LBUTTONDOWN 왼쪽 마우스 버튼 누름  OnLButtonDown() 
WM_LBUTTONUP  왼쪽 마우스 버튼 놓음  OnLButtonUp() 
WM_RBUTTONDBCLK  오른쪽 마우스 버튼 더블클릭 OnLButtonBdlClk()
WM_RBUTTONDOWN  오른쪽 마우스 버튼 누름   OnLButtonDown()
WM_RBUTTONUP   오른쪽 마우스 버튼 놓음  OnLButtonUp()


CTime 클래스, member function
함수 내용 
GetTime time_t값을 리턴(1970/1/1 0시~현재까지의 초값) 
GetYear  연도를 리턴.(1970 - 2038) 
 GetMonth 월을 리턴.(1 - 12) 
GetDay  일을 리턴.(1 - 31) 
 GetHour 시간을 리턴.(0 - 24) 
GetMinute  분을 리턴.(0 - 59) 
GetSecond  초를 리턴.(0 - 59) 
GetDayOfWeek  요일을 리턴한다.(1-일, 2-월....) 

CTime timer;                                 // 타이머 변수 선언
timer = CTime::GetCurrentTime(); // 현재 시간을 얻음

GetCurrentTime();
- 윈도우 시스템으로부터 윈도우 시스템의 현재 날짜와 시간을 얻어 CTime 객체를 생성
- 여기서 GetCurrentTime() 멤버 함수는 
   CTime 클래스의 정적 멤버 함수이므로 클래스 이름과 참조영역자(::)를 붙여 호출.
- 함수 원형 : static CTime PASCAL GetCurrentTime();



Posted by croute

댓글을 달아 주세요