⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nativedlg.cpp

📁 TM8000硬盘录像机客户端编程文档和Demo源代码
💻 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 + -