📄 nativedlg.cpp
字号:
// TestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Sample.h"
#include "NativeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNativeDlg dialog
CNativeDlg::CNativeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNativeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNativeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
bFullWnd = FALSE ;
bPlay = FALSE ;
}
void CNativeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNativeDlg)
DDX_Control(pDX, IDC_CHECK_LOOP, m_Btn_Loop);
DDX_Control(pDX, IDC_SLIDER_PLAYPOS, m_Slider);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNativeDlg, CDialog)
//{{AFX_MSG_MAP(CNativeDlg)
ON_BN_CLICKED(IDC_BUTTON_PLAY, OnButtonPlay)
ON_WM_CLOSE()
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_BUTTON_PAUSE, OnButtonPause)
ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)
ON_BN_CLICKED(IDC_BUTTON_FAST_FORWARD, OnButtonFastForward)
ON_BN_CLICKED(IDC_BUTTON_SINGLE_FRAME_BACKWARD, OnButtonSingleFrameBackward)
ON_BN_CLICKED(IDC_BUTTON_SKIP_BACKWARD, OnButtonSkipBackward)
ON_BN_CLICKED(IDC_BUTTON_SINGLE_FRAME_FORWARD, OnButtonSingleFrameForward)
ON_BN_CLICKED(IDC_BUTTON_OPENFILE, OnButtonOpenfile)
ON_BN_CLICKED(IDC_CHECK_LOOP, OnCheckLoop)
ON_BN_CLICKED(IDC_BUTTON_SINGLE_FRAME_CAPTURE, OnButtonSingleFrameCapture)
ON_WM_LBUTTONDBLCLK()
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_PLAYPOS, OnReleasedcaptureSliderPlaypos)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_PLAYNOTIFY,PlayNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNativeDlg message handlers
BOOL CNativeDlg::OnInitDialog()
{
RECT rect;
CDialog::OnInitDialog();
// TODO: Add extra initialization here
MoveWindow(10,5,715,720);
GetDlgItem(IDC_STATIC_START_TIME)->GetWindowRect(&rect);
rect.bottom=580+rect.bottom-rect.top;
rect.top=580;
GetDlgItem(IDC_STATIC_START_TIME)->MoveWindow(&rect);
GetDlgItem(IDC_STATIC_END_TIME)->GetWindowRect(&rect);
rect.bottom=580+rect.bottom-rect.top;
rect.top=580;
GetDlgItem(IDC_STATIC_END_TIME)->MoveWindow(&rect);
GetDlgItem(IDC_SLIDER_PLAYPOS)->GetWindowRect(&rect);
rect.bottom=580+rect.bottom-rect.top;
rect.top=580;
GetDlgItem(IDC_SLIDER_PLAYPOS)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_OPENFILE)->GetWindowRect(&rect);
rect.bottom=600+rect.bottom-rect.top;
rect.top=600;
GetDlgItem(IDC_BUTTON_OPENFILE)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_PLAY)->GetWindowRect(&rect);
rect.bottom=600+rect.bottom-rect.top;
rect.top=600;
GetDlgItem(IDC_BUTTON_PLAY)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_PAUSE)->GetWindowRect(&rect);
rect.bottom=600+rect.bottom-rect.top;
rect.top=600;
GetDlgItem(IDC_BUTTON_PAUSE)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_STOP)->GetWindowRect(&rect);
rect.bottom=600+rect.bottom-rect.top;
rect.top=600;
GetDlgItem(IDC_BUTTON_STOP)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_SKIP_BACKWARD)->GetWindowRect(&rect);
rect.bottom=630+rect.bottom-rect.top;
rect.top=630;
GetDlgItem(IDC_BUTTON_SKIP_BACKWARD)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_FAST_FORWARD)->GetWindowRect(&rect);
rect.bottom=630+rect.bottom-rect.top;
rect.top=630;
GetDlgItem(IDC_BUTTON_FAST_FORWARD)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_BACKWARD)->GetWindowRect(&rect);
rect.bottom=630+rect.bottom-rect.top;
rect.top=630;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_BACKWARD)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_FORWARD)->GetWindowRect(&rect);
rect.bottom=630+rect.bottom-rect.top;
rect.top=630;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_FORWARD)->MoveWindow(&rect);
GetDlgItem(IDC_CHECK_LOOP)->GetWindowRect(&rect);
rect.bottom=660+rect.bottom-rect.top;
rect.top=660;
GetDlgItem(IDC_CHECK_LOOP)->MoveWindow(&rect);
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_CAPTURE)->GetWindowRect(&rect);
rect.bottom=660+rect.bottom-rect.top;
rect.top=660;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_CAPTURE)->MoveWindow(&rect);
m_Display.Create (this);
m_Display.MoveWindow(172, 145,352,288) ;
m_Display.ShowWindow(SW_SHOW) ;
PB_IniPlayer(&m_PlayHandle,m_Display.GetSafeHwnd());
GetModuleFileName(NULL,m_CurPath.GetBuffer(MAX_PATH),MAX_PATH);
m_CurPath.ReleaseBuffer ();;
int len = m_CurPath.GetLength ();
for(int i=0;i<len;i++)
{
if(m_CurPath.Right (1) != "\\")
m_CurPath.Delete (len -1 -i,1);
else
break;
}
m_CurPath = m_CurPath + "\\Capture\\";
CreateDirectory(m_CurPath,NULL);
GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE) ;
DisableButton() ;
return TRUE; // return TRUE unless you set the focus to a control
}
void CNativeDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
CDialog::OnClose();
}
void aa(const char * a[],int k)
{
char str[256];
int i;
for(i=0;i<k;i++)
{
sprintf(str,"%s\n",a[i]);
TRACE(str);
}
}
void CNativeDlg::OnButtonOpenfile()
{
CString str;
POSITION pos;
DWORD count_total=0,count_select=0 ;
CString head, tail ;
CString head_name, tail_name ;
int hour1,hour2,minute1,minute2 ;
char szFilter[] = "STR Files (*.STR)|*.STR|All Files (*.*)|*.*||";
const char * aaa[1440];
int i;
CFECFileDialog m_OpenDlg(TRUE,
NULL,
NULL,
//OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NODEREFERENCELINKS
OFN_ALLOWMULTISELECT | OFN_EXPLORER ,
szFilter,
this);
if(m_OpenDlg.DoModal() == IDOK)
{
//i = 0;
m_strList.RemoveAll ();
pos = m_OpenDlg.GetStartPosition();
while (pos)
{
str = m_OpenDlg.GetNextPathName(pos);
m_strList.AddTail(str);
//aaa[i] = (LPCTSTR )m_strList.GetTail ();
// i ++;
}
}
else
{
return ;
}
count_select = m_strList.GetCount() ;
if(count_select>0)
{
head = m_strList.GetHead() ;
head_name = head.Right(9) ;
IsMyFile(head_name,hour1,minute1) ;
tail = m_strList.GetTail() ;
tail_name = tail.Right(9) ;
IsMyFile(tail_name,hour2,minute2) ;
int t1 = hour1*60 + minute1 ;
int t2 = hour2*60 + minute2 ;
if(t1>t2)
{
m_strList.RemoveHead() ;
m_strList.AddTail(head);
}
}
for(i=0;i<m_strList.GetCount();i++)
{
pos = m_strList.FindIndex(i);
str = m_strList.GetAt(pos);
//aaa[i] = (LPCTSTR )m_strList.GetTail ();
aaa[i] = (LPCTSTR )str ;
}
// aa(aaa,i);
int ret;
ret = PB_OpenFileEx(m_PlayHandle,aaa,i,m_EndTime);
if(ret == 0)
{
str.Format ("%02d:%02d:%02d",m_EndTime/3600,(m_EndTime/60)%60,m_EndTime%60);
GetDlgItem(IDC_STATIC_END_TIME)->SetWindowText(str);
PB_RegisterMessage(m_PlayHandle,GetSafeHwnd(),WM_PLAYNOTIFY);
m_Slider.SetRange(0,m_EndTime);
m_Slider.SetPos (0);
PB_SetLoop(m_PlayHandle,( m_Btn_Loop.GetCheck () == 1 ? TRUE : FALSE));
}
OnButtonPlay() ;
GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(TRUE) ;
}
void CNativeDlg::OnButtonPlay()
{
PB_Play(m_PlayHandle);
PB_SetAudio(m_PlayHandle,true);
bPlay = 1 ;
EnableButton() ;
}
void CNativeDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
/* int pos;
UpdateData(TRUE);
pos = m_Slider.GetPos ();
TRACE("\n Pos = %d",pos);
PB_SeekToSecond(PORT_NUM,pos);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
*/
}
LRESULT CNativeDlg::PlayNotify(WPARAM wParam, LPARAM lParam)
{
CString str;
if(wParam==(WPARAM)m_PlayHandle)
{
if(lParam == 0xFFFFFFFF)
{
lParam = m_EndTime;
}
if((DWORD)lParam > m_EndTime)
{
lParam = 0;
}
m_Slider.SetPos (lParam);
str.Format ("%02d:%02d:%02d",lParam/3600,(lParam/60)%60,lParam%60);
GetDlgItem(IDC_STATIC_START_TIME)->SetWindowText(str);
}
PB_UpDateImage(m_PlayHandle) ;
return S_OK;
}
void CNativeDlg::OnButtonPause()
{
PB_Pause(m_PlayHandle);
bPlay = 0 ;
DisableButton() ;
}
void CNativeDlg::OnButtonStop()
{
PB_Stop(m_PlayHandle);
bPlay = 0 ;
DisableButton() ;
}
void CNativeDlg::OnButtonFastForward()
{
PB_FastPlay(m_PlayHandle,200);
}
void CNativeDlg::OnButtonSkipBackward()
{
PB_FastBackwardPlay(m_PlayHandle,500);
}
void CNativeDlg::OnButtonSingleFrameForward()
{
PB_StepIn(m_PlayHandle);
}
void CNativeDlg::OnButtonSingleFrameBackward()
{
PB_StepOut(m_PlayHandle);
}
void CNativeDlg::OnCheckLoop()
{
UpdateData(TRUE);
if(m_Btn_Loop.GetCheck () == 1)
{
TRACE("\n Loop");
}
else
{
TRACE("\n No Loop");
}
PB_SetLoop(m_PlayHandle,( m_Btn_Loop.GetCheck () == 1 ? TRUE : FALSE));
}
void CNativeDlg::OnButtonSingleFrameCapture()
{
void *pbmpbuf = NULL;
int bmpsize = 0;
CString str ;
CTime t = CTime::GetCurrentTime();
CFile m_Bmp;
if(PB_CapturePictureEx(m_PlayHandle,&pbmpbuf,bmpsize) == 0)
{
str.Format ("%04d_%02d_%02d_%02d_%02d_%02d.bmp",
t.GetYear (),t.GetMonth (),t.GetDay (),
t.GetHour (),t.GetMinute (),t.GetSecond ());
str = m_CurPath + str;
if(!m_Bmp.Open (str, CFile::modeCreate | CFile::modeWrite |CFile::typeBinary,NULL))
{
return ;
}
m_Bmp.Write (pbmpbuf,bmpsize);
m_Bmp.Close ();
}
}
BOOL CNativeDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if ((pMsg->wParam == VK_RETURN ||
pMsg->wParam == VK_ESCAPE ) &&
pMsg->message == WM_KEYDOWN) // 256
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CNativeDlg::EnableButton()
{
GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_FAST_FORWARD)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_SKIP_BACKWARD)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_FORWARD)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_BACKWARD)->EnableWindow(TRUE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_CAPTURE)->EnableWindow(TRUE) ;
GetDlgItem(IDC_CHECK_LOOP)->EnableWindow(TRUE) ;
}
void CNativeDlg::DisableButton()
{
GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_FAST_FORWARD)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_SKIP_BACKWARD)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_FORWARD)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_BACKWARD)->EnableWindow(FALSE) ;
GetDlgItem(IDC_BUTTON_SINGLE_FRAME_CAPTURE)->EnableWindow(FALSE) ;
GetDlgItem(IDC_CHECK_LOOP)->EnableWindow(FALSE) ;
}
BOOL CNativeDlg::IsMyFile(CString str, int &hour, int &minute)
{
int ret;
if(str.GetLength () != 9)
return FALSE;
if(str[2] != '_')
return FALSE;
str.SetAt (2,' ');
str.SetAt (5,' ');
ret = sscanf(str,"%d %d STR",&hour,&minute);
if(ret == 2)
return TRUE;
return FALSE;
}
void CNativeDlg::OnReleasedcaptureSliderPlaypos(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CString str;
PB_SeekToSecond(m_PlayHandle,m_EndTime*m_Slider.GetPos()/m_Slider.GetRangeMax());
str.Format ("%02d:%02d:%02d",m_Slider.GetPos()/3600,(m_Slider.GetPos()/60)%60,m_Slider.GetPos()%60);
GetDlgItem(IDC_STATIC_START_TIME)->SetWindowText(str);
if(bPlay)
PB_Play(m_PlayHandle);
*pResult = 0;
}
BOOL CNativeDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
PB_Release(m_PlayHandle);
return CDialog::DestroyWindow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -