void CEditableRange::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if (nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK || nSBCode == SB_LINERIGHT || nSBCode == SB_LINELEFT) { UpdateData(TRUE); if (nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK) { m_SliderPos = nPos; UpdateData(FALSE); } CSliderCtrl *sl = (CSliderCtrl *) GetDlgItem(IDC_SLIDER); if ( (sl->GetRangeMax() - sl->GetRangeMin()) != 0 ) { updateValueFromSlider(m_SliderPos * 1.f / (sl->GetRangeMax() - sl->GetRangeMin())); } else { updateValueFromSlider(0); } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } }
void CEditableRange::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult) { UpdateData(); CSliderCtrl *sl = (CSliderCtrl *) GetDlgItem(IDC_SLIDER); if ( (sl->GetRangeMax() - sl->GetRangeMin()) != 0 ) { updateValueFromSlider(m_SliderPos * 1.f / (sl->GetRangeMax() - sl->GetRangeMin())); } else { updateValueFromSlider(0); } *pResult = 0; }
void VideoAbsSUBDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //CDialogEx::OnTimer(nIDEvent); switch (nIDEvent) { case 1://player1的滑动条 { if (Tab1_playpiece) { CSliderCtrl * SliderCtrl = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1_TAB1)); SliderCtrl->SetPos(Tab1_Player1.m_currentFrameNO); } else { CSliderCtrl * SliderCtrl = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1_TAB1)); int CurrentPos = SliderCtrl->GetPos(); ///<获取当前进度条位置 int NewCurrentFrameNO = (double)CurrentPos*double(Tab1_Player1.m_endFrameNO - Tab1_Player1.m_startFrameNO) / (double)SliderCtrl->GetRangeMax(); ///<根据当前进度条位置,重新计算帧号 if (Tab1_Player1.m_playState != PLAY_STATE_STOP && Tab1_Player1.m_playState != PLAY_STATE_FAST_FORWORD &&Tab1_Player1.m_playState != PLAY_STATE_PLAY_PIECE)///<若播放器处于正常播放或暂停状态 { if (abs(NewCurrentFrameNO - Tab1_Player1.m_currentFrameNO)>5) { Tab1_Player1.m_currentFrameNO = NewCurrentFrameNO; ///<根据新计算的帧号,重置播放器 } } SliderCtrl->SetPos(Tab1_Player1.m_currentFrameNO); ///<根据新计算的帧号,重置滑动条 CWnd *pWndTimeDis = GetDlgItem(IDC_STATIC_TAB1_ORI_TIME); if (Tab1_Player1.m_playState != PLAY_STATE_STOP) ///<非停止状态下,用方式一显示时间 { Tab1_Player1.ShowTime(Tab1_Player1.m_currentFrameNO, Tab1_Player1.m_endFrameNO - Tab1_Player1.m_startFrameNO, Tab1_Player1.m_videoTimeInSecond, pWndTimeDis, 1); } else ///<停止状态下,用方式二显示时间 { SliderCtrl->SetPos(0); Tab1_Player1.ShowTime(Tab1_Player1.m_currentFrameNO, Tab1_Player1.m_endFrameNO - Tab1_Player1.m_startFrameNO, Tab1_Player1.m_videoTimeInSecond, pWndTimeDis, 0); } } } case 2://player2的滑动条 { if (Tab1_playpiece) { CSliderCtrl * SliderCtrl = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER2_TAB1)); SliderCtrl->SetPos(Tab1_Player2.m_currentFrameNO); } else { CSliderCtrl * SliderCtrl = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER2_TAB1)); int CurrentPos = SliderCtrl->GetPos(); ///<获取当前进度条位置 int NewCurrentFrameNO = (double)CurrentPos*double(Tab1_Player2.m_endFrameNO - Tab1_Player2.m_startFrameNO) / (double)SliderCtrl->GetRangeMax(); ///<根据当前进度条位置,重新计算帧号 if (Tab1_Player2.m_playState != PLAY_STATE_STOP && Tab1_Player2.m_playState != PLAY_STATE_FAST_FORWORD &&Tab1_Player2.m_playState != PLAY_STATE_PLAY_PIECE)///<若播放器处于正常播放或暂停状态 { if (abs(NewCurrentFrameNO - Tab1_Player2.m_currentFrameNO)>5) { Tab1_Player2.m_currentFrameNO = NewCurrentFrameNO; ///<根据新计算的帧号,重置播放器 } } SliderCtrl->SetPos(Tab1_Player2.m_currentFrameNO); ///<根据新计算的帧号,重置滑动条 CWnd *pWndTimeDis = GetDlgItem(IDC_STATIC_TAB1_ABS_TIME); if (Tab1_Player2.m_playState != PLAY_STATE_STOP) ///<非停止状态下,用方式一显示时间 { Tab1_Player2.ShowTime(Tab1_Player2.m_currentFrameNO, Tab1_Player2.m_endFrameNO - Tab1_Player2.m_startFrameNO, Tab1_Player2.m_videoTimeInSecond, pWndTimeDis, 1); } else ///<停止状态下,用方式二显示时间 { SliderCtrl->SetPos(0); Tab1_Player2.ShowTime(Tab1_Player2.m_currentFrameNO, Tab1_Player2.m_endFrameNO - Tab1_Player2.m_startFrameNO, Tab1_Player2.m_videoTimeInSecond, pWndTimeDis, 0); } } } case 3:///<刷进度条 { if (!Tab1_ifStartPro) { Tab1_Pro->SetPos(0); SetDlgItemText(IDC_STATIC_TAB1_PRO, _T(""));//helloworld } else if (Tab1_videoPro->m_IfDoneFus)///<如果已经生成摘要则将ClistCtrl中响应的行显示为“已生成摘要” { Tab1_ifStartPro = false; MessageBox(_T("已生成摘要")); GetDlgItem(IDC_PROGRESS_TAB1)->ShowWindow(false); } ///如果正在生成还未生成完毕,刷新进度条上方的显示处理阶段 else if (Tab1_videoPro->m_IfContinue) { int VideoPos = (int)Tab1_videoPro->ProcessingSpeed(); if (VideoPos == 0) { //SetDlgItemText(IDC_STATIC_TAB1_PRO, "视频预处理……"); if(Tab1_videoPro->StepBitmapDefault[0] == false) { CBitmap *m_bmp=new CBitmap; m_bmp->LoadBitmap(IDB_STEP1); m_bmp=UIBeautifier.CBitmapResize(*m_bmp,668.0*UIBeautifier.rcDeskRect.Width()/1214,501.0*UIBeautifier.rcDeskRect.Height()/760); HBITMAP hBmp;// = HBITMAP(m_bmp);//将CBitmap转换为HBITMAP hBmp=(HBITMAP)(*m_bmp); ((CStatic *)GetDlgItem(IDC_STATIC_TAB1_ABS))->SetBitmap(hBmp); Tab1_videoPro->StepBitmapDefault[0] = true; } } //if (VideoPos == 1) //{ // //SetDlgItemText(IDC_STATIC_TAB1_PRO, "生成切分视频……"); // if(Tab1_videoPro->StepBitmapDefault[1] == false) // { // CBitmap *m_bmp=new CBitmap; // m_bmp->LoadBitmap(IDB_STEP2); // m_bmp=UIBeautifier.CBitmapResize(*m_bmp,668.0*UIBeautifier.rcDeskRect.Width()/1214,501.0*UIBeautifier.rcDeskRect.Height()/760); // HBITMAP hBmp;// = HBITMAP(m_bmp);//将CBitmap转换为HBITMAP // hBmp=(HBITMAP)(*m_bmp); // ((CStatic *)GetDlgItem(IDC_STATIC_TAB1_ABS))->SetBitmap(hBmp); // Tab1_videoPro->StepBitmapDefault[1] = true; // } //} if (VideoPos == 1) { //SetDlgItemText(IDC_STATIC_TAB1_PRO, "视频背景处理……"); if(Tab1_videoPro->StepBitmapDefault[2] == false) { CBitmap *m_bmp=new CBitmap; m_bmp->LoadBitmap(IDB_STEP3); m_bmp=UIBeautifier.CBitmapResize(*m_bmp,668.0*UIBeautifier.rcDeskRect.Width()/1214,501.0*UIBeautifier.rcDeskRect.Height()/760); HBITMAP hBmp;// = HBITMAP(m_bmp);//将CBitmap转换为HBITMAP hBmp=(HBITMAP)(*m_bmp); ((CStatic *)GetDlgItem(IDC_STATIC_TAB1_ABS))->SetBitmap(hBmp); Tab1_videoPro->StepBitmapDefault[2] = true; } } if (VideoPos == 2) { //SetDlgItemText(IDC_STATIC_TAB1_PRO, "视频前景处理……"); if(Tab1_videoPro->StepBitmapDefault[3] == false) { CBitmap *m_bmp=new CBitmap; m_bmp->LoadBitmap(IDB_STEP4); m_bmp=UIBeautifier.CBitmapResize(*m_bmp,668.0*UIBeautifier.rcDeskRect.Width()/1214,501.0*UIBeautifier.rcDeskRect.Height()/760); HBITMAP hBmp;// = HBITMAP(m_bmp);//将CBitmap转换为HBITMAP hBmp=(HBITMAP)(*m_bmp); ((CStatic *)GetDlgItem(IDC_STATIC_TAB1_ABS))->SetBitmap(hBmp); Tab1_videoPro->StepBitmapDefault[3] = true; } } if (VideoPos == 3) { //SetDlgItemText(IDC_STATIC_TAB1_PRO, "视频融合……"); if(Tab1_videoPro->StepBitmapDefault[4] == false) { CBitmap *m_bmp=new CBitmap; m_bmp->LoadBitmap(IDB_STEP5); m_bmp=UIBeautifier.CBitmapResize(*m_bmp,668.0*UIBeautifier.rcDeskRect.Width()/1214,501.0*UIBeautifier.rcDeskRect.Height()/760); HBITMAP hBmp;// = HBITMAP(m_bmp);//将CBitmap转换为HBITMAP hBmp=(HBITMAP)(*m_bmp); ((CStatic *)GetDlgItem(IDC_STATIC_TAB1_ABS))->SetBitmap(hBmp); Tab1_videoPro->StepBitmapDefault[4] = true; } } Tab1_Pro->SetPos((int)(Tab1_videoPro->ProcessingSpeed()*100.0)); } else { if ((int)Tab1_videoPro->ProcessingSpeed() == -1) { Tab1_ifStartPro = false; MessageBox(_T("视频时长过短,无需融合处理")); } } } case 4://摘要窗口的左键单击 { if (Tab1_Player2.m_gotCVlclick == TRUE) //&& Abstractplayer.m_playState == PLAY_STATE_PAUSE { Tab1_clickedObjRecPosInVec = -1; CPoint posInWnd = Tab1_Player2.m_lBtnUpPosInCVWnd;///<播放器对象传出的点击坐标,此时的点击位置已经是原始帧尺寸的坐标 double clickPosXInImg = double(posInWnd.x); double clickPosYInImg = double(posInWnd.y);///<注意此时的点击位置已经是原始帧尺寸的坐标 Tab1_distanceToRecCenter = 1000000; Tab1_objectRectVector.clear(); ///<从数据库中读取ROI信息 if (!Tab1_MysqlHandle->FindROIFromNewTraceTable(Tab1_Player2.m_currentFrameNO, &Tab1_objectRectVector, Tab1_videoPro->m_tableParams.NewTraceTable))//////"00015_h_NewTraceTable" { AfxMessageBox(_T("数据库出错")); return; } for (int i = 0; i<Tab1_objectRectVector.size(); i++)///<遍历所有ROI目标框 { if (clickPosXInImg < Tab1_objectRectVector[i].x + Tab1_objectRectVector[i].width && clickPosXInImg >Tab1_objectRectVector[i].x///<判断点击是否在当前框内 && clickPosYInImg < Tab1_objectRectVector[i].y + Tab1_objectRectVector[i].height && clickPosYInImg > Tab1_objectRectVector[i].y) { int tempDistance = (clickPosXInImg - (Tab1_objectRectVector[i].x + Tab1_objectRectVector[i].width / 2))* (clickPosXInImg - (Tab1_objectRectVector[i].x + Tab1_objectRectVector[i].width / 2)) + (clickPosYInImg - (Tab1_objectRectVector[i].y + Tab1_objectRectVector[i].height / 2))* (clickPosYInImg - (Tab1_objectRectVector[i].y + Tab1_objectRectVector[i].height / 2));///<计算点击位置与当前ROI中心的距离 if (tempDistance < Tab1_distanceToRecCenter) { Tab1_distanceToRecCenter = tempDistance;///<当前距离小于记录的最小距离,则更新这个最小距离 Tab1_clickedObjRecPosInVec = i; ///<并记录当前ROI在向量中的下标值 } } } if (Tab1_clickedObjRecPosInVec == -1) { return; } /*if (m_theObjRecClicked != m_objectRectVector[m_clickedObjRecPosInVec]) {*/ Tab1_theObjRecClicked = Tab1_objectRectVector[Tab1_clickedObjRecPosInVec]; int m_theorigFrame = 0; if (Tab1_videoPro != NULL) { int m_origPara = Tab1_MysqlHandle->FindOrigParaFromFGTraceTable(Tab1_videoPro->m_tableParams.FGTraceTableName, Tab1_theObjRecClicked); m_theorigFrame = Tab1_MysqlHandle->FindOrigFrameFromVideoFGTable(Tab1_videoPro->m_tableParams.VideoFGTableName, m_origPara);//m_videoPro->m_tableParams.NewTraceTable //m_theorigFrame = m_MysqlVideoParaSearchHandle->FindOrigFrameFromNewTraceTable(m_videoPro->m_tableParams.NewTraceTable,m_theObjRecClicked);//m_videoPro->m_tableParams.NewTraceTable } if (m_theorigFrame == -1) { MessageBox(_T("数据库有误")); Tab1_Player2.m_gotCVlclick = FALSE; return; }; //else //{ // Originalplayer.m_startFrameNO = MAX(0,m_theorigFrame-500);///<未能得到帧号,则默认播放前500帧和后1000帧 // Originalplayer.m_endFrameNO = Originalplayer.m_startFrameNO + 1000; //} //player1.m_filePath = absOriNameTansf(Abstractplayer.m_filePath); Tab1_Player1.m_currentFrameNO = m_theorigFrame; ///<初始化原始视频播放器 //} Tab1_playpiece = TRUE; Tab1_Player2.m_gotCVlclick = FALSE; ///<点击比对完毕,将得到点击标志位置否 } } default: break; } }