方法一: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);
}