コード例 #1
0
ファイル: editable_range.cpp プロジェクト: CCChaos/RyzomCore
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);
	}		
}
コード例 #2
0
ファイル: editable_range.cpp プロジェクト: CCChaos/RyzomCore
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;
}
コード例 #3
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;
	}
}