2.1. 기본 법 ¶
멀미디 머 관련된 는 러가나, 머를 구는데 는 개다.
! 그러나 그 가 게 다.
는 WINMM.LIB를 가 고
둘는 MMSYSTEM.H 를 루드 다.
! 그러나 그 가 게 다.
는 WINMM.LIB를 가 고
둘는 MMSYSTEM.H 를 루드 다.
- 가는법 :
#include <mmsystem.h> 를 고
Project(P) - Setting(S, ALT+F7) 러 Link Object/Library modules:란 winmm.lib를 다.
2.1.1. timeSetEvent ¶
머를 발동는 다.
~cpp MMRESULT timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent);
- MMRESULT는 머 가 리됩다. NULL 경는 경다.
- uDelay : 머가 될 격 다. 단는 ms다.
- uResolution : 대개 0 다만... 같다고 다.
- lpTimeProc : CALLBACK 다.
- dwUser : CALLBACK 달 를 다.
- fuEvent : 머가 되는 방법 다.
- TIME_ONESHOT : CALLBACK가 만 됩다.
- TIME_PERIODIC : uDelay 날 때다 CALLBACK가 됩다.
- TIME_ONESHOT : CALLBACK가 만 됩다.
2.1.2. TimeProc ¶
머로 러내 되는 부다
~cpp void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
- uID : 머 가 다
- dwUser : timeSetEvent dwUser값 다.
- 나머 두 변는 다.
- 것 라 변로 된다. 굳 래 고 다면 static로 다.
2.1.3. timeKillEvent ¶
끝난 머를 는 부다.
~cpp MMRESULT timeKillEvent(UINT uTimerID);
- uTimerID 는 머 를 다.
2.2. ¶
CALLBACK 를 로 경
~cpp m_TimerID=timeSetEvent(20,1,&TimerProc,(DWORD)this,TIME_PERIODIC);
- 머를 는 부다.
- m_TimerID는 UINT 다.
~cpp void CALLBACK TimerProc(UINT uiID,UINT uiMsg,DWORD dwUser,DWORD dw1,DWORD dw2) { CAlcaDlg *pDlg=(CAlcaDlg*)AfxGetMainWnd(); pDlg->SendMessage(WM_MYMSG,0,0); }
- 를 것다. 내는 복 는게 강 다고 다.
그래 메로 날려 봤다. 그런데 루 못느끼겠더군..--;
고것 면 고 길...
~cpp CAlcaDlg *pDlg = (CAlcaDlg*)AfxGetMainWnd(); // 메 를 timeKillEvent(pDlg->m_TimerID); // 머 료
CALLBACK 를 래 로 경
래 timeproc는 static 로 다.
래 timeproc는 static 로 다.
- CALLBACK 는 래 내 될 경는 static로 되다.
~cpp m_nTimerID = timeSetEvent(5, 0, (LPTIMECALLBACK)timeproc, (DWORD)this, TIME_PERIODIC);
- m_nTimerID는 UINT 다. 공 경는 머 가 다.
- 5는 머가 될 격다. 단는 ms(1/1000)다.
- this는 래 값 겨다. 래 내부 로 경는 값다.
~cpp void CALLBACK CMyDlg::timeproc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2){ CMyDlg *pDlg = (CMyDlg *)dwUser; pDlg->......
dwUser는 timeSetEvent this값 로 pDlg 를 다.
pDlg를 래 래 모든 메드 변를 다.
pDlg를 래 래 모든 메드 변를 다.
~cpp timeKillEvnet(m_nTimerID);
setTimerEvent때 머 를 머를 다.
2.3. ¶
- CALLBACK 를 때 . (in MSDN)
- Applications should not call any system-defined functions from inside a callback function, except for PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
- 리 내부로부 다 를 고는 를 부를 가 다. : PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.
만 들 Callback 내 부르면 됩다.
- KB문 Q130866 고다.
CALLBACK 내부 면 때는 Invalidte()나 user 메를 만들 날려면 됩다.
~cpp void CALLBACK EXPORT CTmrprocView::TimerProc(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime) { CTmrprocView * pThis; if (m_thisList.Lookup(idTimer, (LPVOID &) pThis)) { ASSERT(pThis->GetSafeHwnd()); CDC* pDC = pThis->GetDC(); wsprintf((LPSTR) pThis->m_strOutput, "CTmrprocView::TimerProc() Called. Count = %ld", ++pThis->m_cCount); pThis->Invalidate(TRUE); } }