2010년 10월 7일 목요일

MFC timer 사용법

타이머

타이머는 지정된 시간마다 주기적으로 애플리케이션에 메시지를 전달해주는 기능. 예를 들어 ‘5초마다 신호를 보내라’고 설정하면 5초 단위로 WM_TIMER메세지가 전달

타이머의 용도 :
자동저장, 에니메이션, 멀티태스킹, 특히 멀티미디어에서 많이 사용.

관련함수(MFC) :
UINT Cwnd::SetTimer(UINT nIEvent,UINT nElapse, void(CALLBACK EXPORT* lpfnTimer)(HWND, UINT,UNIT,DWORD))

BOOL CWnd::KillTimer(int nIDEvent);

시간 단위는 밀리초(milisecond), 1~4294967295밀리초까지 지정가능. 예를 들어 1000을 지정하면 매 1초마다 WM_TIMER메세지발생, 이론상으로 매초 1000번의 타이머가 발생할 수 있지만, 실제로 PC하드웨어는 초당 18.2번 발생. 즉 54.924밀리초 이하의 정밀도는 가질 수 없다(지정은 가능하다), 타이머 메시지는 프로그램이 메시지를 처리하는 속도와도 관련이 있다. 즉 하나의 타이머 메시지를 처리하지 못한 상태로 또 타이머를 받게 되면, 이전의 타이머 메시지는 없어진다.따라서 정밀한 제어계측과 같은 분야나 실시간 장비 제어같은 분야에서는 사용할 수 없다.

타이머 설정 :
#define ID_TIME 1
UINT m_uTimer;

//타이머를 설정(1000밀리초 = 1초)
m_uTimer = SetTimer(ID_TIMER, 1000, NULL);

if(!m_uTimer)
{
AfxMessageBox(“Cannot set timer”);
PostQuitMessage(0);
}

타이머 해지
//타이머를 해지
if(m_uTimer)
KillTimer(ID_TIMER)

WM_TIMER메시지의 핸들러 함수 OnTimer(UINT nIDEvent)에서 타이머가 발생할 때 마다 해야 할 일들을 적어 준다.


현재시간 얻기 :
MFC에서 시간에 관련한 클래스로 CTime클래스가 있다. 가장 손쉬운 방법은 다음과 같이 Ctime 클래스의 GetCurrentTime()과 Format()멤버함수 사용한다.

Ctime t = CTime::GetCurrentTime();
Cstring strCurrentTime = t.Format(%I:%M:%S %p”); //시,분,초, AM포맷

GetCurrentTime()은 현재 시간을 얻어내 CTime의 객체를 리턴한다.
Format()멤버함수는 시간을 문자열로 얻어내는 멤버함수.
시간을 문자열로 변환하는 자세한 내용은 strftme()함수 참조.


화면전체 크기 얻기

BOOL CDC::GetTextMetrics(LPTEXTMETRIC lpMetrics)함수를 사용한다.

Int cxScreen = ::GetSystemMetrics(SM_CXSCREEN); //화면너비
Int cyScreen = ::GetSystemMetrics(SM_CYSCREEN); //화면높이

참고 : CWnd::GetDesktopWindow()함수는 전체 윈도우(desktop window)를 얻어내는 함수이다. 이 함수를 통해 얻어진 CWnd객체는 화면 전체 윈도우를 가리킨다.

 

출처) http://uuzazuk9.egloos.com/907024

댓글 없음:

댓글 쓰기