📄 seqprocessdlgplay.cpp
字号:
// SeqProcessDlgPlay.cpp : implementation file
//
#include "stdafx.h"
#include "SeqProcess.h"
#include "SeqProcessDlg.h"
#include "FnMath.h"
#include "matrix.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define FRAMERATE 25
// Create a math functions object
static FnMath fMath;
////////////////////////////////////////////////////////////////////////////////
void CSeqProcessDlg::InitializePlay()
{
DisablePlayDlgItems();
DisablePlayButtons();
isEditCurrentFrameNumber = FALSE;
isEditFromFrameNumber = FALSE;
isEditToFrameNumber = FALSE;
m_direction = 1; // 1 => forward play; -1 => backward play
m_check_frame = FALSE;
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::EnablePlayDlgItems()
{
GetDlgItem(IDC_EDIT_CURRENTFRAME)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_FROMFRAME)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_TOFRAME)->EnableWindow(TRUE);
GetDlgItem(IDC_SLIDER_FRAMENUM)->EnableWindow(TRUE);
GetDlgItem(IDC_CHECK_FRAME_MODE)->EnableWindow(TRUE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::EnablePlayButtons()
{
GetDlgItem(IDC_BUTTON_FORWARD)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_BACKWARD)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_HOME)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(TRUE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::DisablePlayDlgItems()
{
GetDlgItem(IDC_EDIT_CURRENTFRAME)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_FROMFRAME)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_TOFRAME)->EnableWindow(FALSE);
GetDlgItem(IDC_SLIDER_FRAMENUM)->EnableWindow(FALSE);
GetDlgItem(IDC_CHECK_FRAME_MODE)->EnableWindow(FALSE);
UpdateData(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::DisablePlayButtons()
{
GetDlgItem(IDC_BUTTON_FORWARD)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_BACKWARD)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_HOME)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnPlayStart()
{
DisablePlayButtons();
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
UINT milliSec;
milliSec = (int) (0.5 + 1000.0/FRAMERATE);
SetTimer(1, milliSec, NULL);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnPlayStop()
{
KillTimer(1);
EnablePlayButtons();
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnPlayNext()
{
int MinFrame = m_fromframe - dlgLoadSequence.m_from;
int MaxFrame = m_toframe - dlgLoadSequence.m_from;
currentFrame++;
if( currentFrame > MaxFrame)
{
currentFrame = MinFrame;
}
DrawCurrentImage();
// Update the slider display
m_currentframe = currentFrame + dlgLoadSequence.m_from;
m_sliderframe.SetPos(m_currentframe);
UpdateData(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnPlayPrev()
{
int MinFrame = m_fromframe - dlgLoadSequence.m_from;
int MaxFrame = m_toframe - dlgLoadSequence.m_from;
currentFrame--;
if( currentFrame < MinFrame)
{
currentFrame = MaxFrame;
}
DrawCurrentImage();
// Update the slider display
m_currentframe = currentFrame + dlgLoadSequence.m_from;
m_sliderframe.SetPos(m_currentframe);
UpdateData(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnTimer(UINT nIDEvent)
{
int MinFrame = m_fromframe - dlgLoadSequence.m_from;
int MaxFrame = m_toframe - dlgLoadSequence.m_from;
currentFrame += m_direction;
if( currentFrame > MaxFrame)
{
currentFrame = MinFrame;
}
else if( currentFrame < MinFrame)
{
currentFrame = MaxFrame;
}
DrawCurrentImage();
// Update the slider display
m_currentframe = currentFrame + dlgLoadSequence.m_from;
m_sliderframe.SetPos(m_currentframe);
UpdateData(FALSE);
CDialog::OnTimer(nIDEvent);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonForward()
{
UpdateData(TRUE);
if( m_check_frame)
{
OnPlayNext();
}
else
{
m_direction = 1;
OnPlayStart();
}
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonBackward()
{
UpdateData(TRUE);
if( m_check_frame)
{
OnPlayPrev();
}
else
{
m_direction = -1;
OnPlayStart();
}
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonHome()
{
GotoFrame(m_fromframe);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonEnd()
{
GotoFrame(m_toframe);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnButtonStop()
{
OnPlayStop();
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::GotoFrame( int fr)
{
currentFrame = fr - dlgLoadSequence.m_from;
DrawCurrentImage();
// Update the slider display
m_currentframe = currentFrame + dlgLoadSequence.m_from;
m_sliderframe.SetPos(m_currentframe);
UpdateData(FALSE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
UpdateData(TRUE);
int pos = m_sliderframe.GetPos();
//if( pos < m_fromframe) pos = m_fromframe;
//else if( pos > m_toframe) pos = m_toframe;
m_sliderframe.SetPos( pos);
UpdateData(FALSE);
if(m_currentframe != pos)
{
m_currentframe = pos;
currentFrame = m_currentframe - dlgLoadSequence.m_from;
UpdateData(FALSE);
DrawCurrentImage();
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnChangeEditCurrentframe()
{
isEditCurrentFrameNumber = TRUE;
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnKillfocusEditCurrentframe()
{
// Frame number not changed
UpdateData(TRUE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnChangeEditFromframe()
{
isEditFromFrameNumber = TRUE;
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnKillfocusEditFromframe()
{
// Frame number not changed
UpdateData(TRUE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnChangeEditToframe()
{
isEditToFrameNumber = TRUE;
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnKillfocusEditToframe()
{
// Frame number not changed
UpdateData(TRUE);
}
//--------------------------------------------------------------------------------
void CSeqProcessDlg::OnCheckFrameMode()
{
UpdateData(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -