方法一:Slider
1.对话框点工具箱,将Slider拖到界面,并为其设置变量m_slider。
2.在OnInitDialog中增添初始化为:
GetDlgItem( IDC_SLIDER1 )->EnableWindow( FALSE );//用来控制界面显示不显示滑动条,可以在不使用时关闭。
m_slider.SetRange(0,100);
m_slider.SetTicFreq(10);
3.在类向导中找到消息找到WM_HSCROLL消息,并为其添加处理程序。
void CProject_twoDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int pos = m_slider.GetPos();
CString str;
str.Format(_T("滑动条位置为:%d"),pos);
m_StatusBar.SetPaneText(0,str,true);
// 设置滚动块位置
//m_slider.SetPos(pos);
if(cap0.isOpened()&& cap45.isOpened()&& cap90.isOpened())
{
double testFrame=pos*frameCount/100.0;//frameCount为视频总帧数
cap0.set(CV_CAP_PROP_POS_FRAMES,testFrame);
cap45.set(CV_CAP_PROP_POS_FRAMES,testFrame);
cap90.set(CV_CAP_PROP_POS_FRAMES,testFrame);
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
于是便可以在滑动条实现跳帧播放。
方法二:ScrollBar原理跟Slider类似,只是在工具箱中要拖出来ScrollBar,初始代码跟位置获取方法如下:
m_horiScrollbar.SetScrollRange(1, 100);
// 设置水平滚动条的初始位置为20
m_horiScrollbar.SetScrollPos(20);
// 在编辑框中显示20
SetDlgItemInt(IDC_EDIT, 20);
void CTrackBARDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// 获取水平滚动条当前位置
int pos = m_horiScrollbar.GetScrollPos();
switch (nSBCode)
{
// 如果向左滚动一列,则pos减1
case SB_LINELEFT:
pos -= 1;
break;
// 如果向右滚动一列,则pos加1
case SB_LINERIGHT:
pos += 1;
break;
// 如果向左滚动一页,则pos减10
case SB_PAGELEFT:
pos -= 10;
break;
// 如果向右滚动一页,则pos加10
case SB_PAGERIGHT:
pos += 10;
break;
// 如果滚动到最左端,则pos为1
case SB_LEFT:
pos = 1;
break;
// 如果滚动到最右端,则pos为100
case SB_RIGHT:
pos = 100;
break;
// 如果拖动滚动块到指定位置,则pos赋值为nPos的值
case SB_THUMBPOSITION:
pos = nPos;
break;
// 下面的m_horiScrollbar.SetScrollPos(pos);执行时
// 会第二次进入此函数,最终确定滚动块位置,并且会
// 直接到default分支,所以在此处设置编辑框中显示数值
default:
SetDlgItemInt(IDC_EDIT, pos);
return;
}
// 设置滚动块位置
m_horiScrollbar.SetScrollPos(pos);
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}