64,654
社区成员
发帖
与我相关
我的任务
分享
static VOID __stdcall TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);
static CMapPtrToPtr m_TimerIdSimuRamPtrMap;
bool CSimuRam::Extend()
{
m_nExtendTimerID = ::SetTimer(NULL, 1, 50, TimerProc);
m_TimerIdSimuRamPtrMap.SetAt((void*&)m_nExtendTimerID, this);
return true;
}
VOID __stdcall CSimuRam::TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
CSimuRam* pThis = NULL;
int nID;
POSITION pos = m_TimerIdSimuRamPtrMap.GetStartPosition();
while(pos)
{
m_TimerIdSimuRamPtrMap.GetNextAssoc(pos, (void*&)nID, (void*&)(pThis));
if (nID == iTimerID)
break;
}
if (pThis == NULL)
{
ASSERT(FALSE);
return;
}
if (pThis->m_nCurrentPos < pThis->m_nMaxStroke - pThis->m_nUpperDeadBand)
{
pThis->m_nCurrentPos += float(pThis->m_nRaiseSpeed) * 50 / 1000; //50ms
if (pThis->m_nCurrentPos >= pThis->m_nMaxStroke - pThis->m_nUpperDeadBand)
{
pThis->m_nCurrentPos = pThis->m_nMaxStroke - pThis->m_nUpperDeadBand;
::KillTimer(NULL, iTimerID);
}
}
}