
Какую работу нужно написать?
Реализация таймера.
При успешной загрузке данных из файла устанавливается системный таймер с временем срабатывания (в миллисекундах), равным 2. Таймеры являются лимитированным глобальным ресурсом системы, поэтому следует проверять код, возвращаемый функцией SetTimer. После установки таймера каждые 2 миллисекунды система будет посылать в очередь сообщений нашего приложения сообщение WM_TIMER. Значение третьего параметра NULL говорит о том, что сообщение будет обрабатываться в оконном классе, а не в специально созданной глобальной функции, адрес которой следовало бы передать третьим параметром. При возникновении прерывания от таймера управление будет передано в функцию OnTimer.
void CNewvisualDlg::OnTimer(UINT nIDEvent)
{
if(Flag == true)
{
if(m_dlgPaint.NPoints == 500)
m_dlgPaint.NPoints = (m_dlgPaint.x2 - m_dlgPaint.x1);
else
{
m_dlgPaint.NPoints+=(m_dlgPaint.x2 - m_dlgPaint.x1);
m_dlgPaint.PointCounter+=(m_dlgPaint.x2 - m_dlgPaint.x1);
}
m_dlgPaint.rect.left = m_dlgPaint.x1-5;
m_dlgPaint.rect.right = m_dlgPaint.x1;
m_dlgPaint.rect.top = m_dlgPaint.y1;
m_dlgPaint.rect.bottom = m_dlgPaint.y2+10;
CRect rect2;rect2.CopyRect(&m_dlgPaint.rect);
rect2.SetRect(0,0,(m_dlgPaint.rect.right-1),
m_dlgPaint.rect.bottom);
m_dlgPaint.InvalidateRect(&rect2);
}
if(m_dlgPaint.rect.right >= m_dlgPaint.x2) Flag = true;
if(m_dlgPaint.Counter < m_dlgPaint.NPoints)
{
m_dlgPaint.Counter+=5;
m_dlgPaint.rect.left+=5;
m_dlgPaint.rect.right+=5;
Flag=false;
}
else Flag = true;
if(m_dlgPaint.NPoints>=8000)
{
Flag = true;
m_dlgPaint.NPoints= 500;
m_dlgPaint.Counter = 0;
m_dlgPaint.PointCounter = 0;
}
m_dlgPaint.InvalidateRect(&m_dlgPaint.rect);
CDialog::OnTimer(nIDEvent);
}
Реализация qrs детектора.
Интеграция в проект QRS детектора была осуществлена при помощи руководителя практики, заголовочный файл и файл реализации были подключены к проекту. Графическая реализация была целиком самостоятельной работой. Для отображения заметок определения QRS, в функцию, рисующую график добавляется параметр (массив из 8000 элементов)
//код заполнения массива для
//последующего отображения в окне просмотра
if(m_dlgPaint.StartOtv[0] == 0) return;
INT disp,amp;
memset(m_dlgPaint.DifFlag,0,8000);
for(i=0;i<8000;i++)
if(CalcPoint(m_dlgPaint.StartOtvFilt[i],&disp,&))
{
m_dlgPaint.DifFlag[i-disp] = 1;
}