在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → c++ 监控软件客户端源码

c++ 监控软件客户端源码

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:3.86M
  • 下载次数:57
  • 浏览次数:544
  • 发布时间:2017-06-03
  • 实例类别:Android手机应用开发
  • 发 布 人:what6300
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 客户端源码

实例介绍

【实例简介】
【实例截图】

【核心代码】


// newclientDlg.cpp : implementation file
//

#include "stdafx.h"
#include "newclient.h"
#include "newclientDlg.h"
#include "MyOutput.h"
#include "Curwin.h"
#include "EventLog.h"
#include "VoiceExchange.h"
#include "SetAlarm.h"
#include "PlayBack.h"
#include "SystemConfig.h"
#include "DecodeCardSDK.h"
#include "RemoteParamsCfg.h"

CRemoteParamsCfg	RemoteParamsCfgDlg;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WM_MYCOMMAND	WM_USER 1		//for sdk

CLIENTPARAM ClientParam;
SERVER_INFO serverinfo[MAXIPNUMBER];
IP_INFO		allipinfo[MAXIPNUMBER][MAXCHANNUM];
IP_INFO		selipinfo[MAXNUMBER];
ALARM_INFO	alarminfo[MAXALARMIN];
int			iSurveillanceNumber;
CMyOutput myoutput[MAXVIEWNUM];
CCurwin mycurwin;
char cWorkDir[256];
BOOL bLargeWnd = FALSE;		//播放窗口是否在放大,如果是放大的窗口,则关闭该窗口时,恢复到原来多窗口画面;
WORD numberpos = 0;
HBRUSH	hBrush;
extern WORD iActiveWndNumber;
extern		LONG	lVoiceIndex;
extern	void	ReadSurveillanceConfig();
extern	void	ReadClientConfig();
extern	void F_AddEvent(CString csEvent);
int MYVIEW_LEFT = 20;
int MYVIEW_TOP = 20;
HANDLE hVideoBeeper;		//报警事件
HANDLE hBeepThread;		//报警线程
extern int nUseCard;
CNewclientDlg *MainDlg;
BOOL g_bShareSound = FALSE;
int g_nNetDelay = 2;
void *pDecHandle;
void *pEncHandle;
DWORD g_dwcnt = 0;

UINT  Beeper(LPVOID pParam)
{
	while (true)
	{
		Beep(800,500);
		Beep(1000,500);
		Beep(800,500);
		Beep(1000,500);
		if (WaitForSingleObject(hVideoBeeper,1000) == WAIT_OBJECT_0)
		{
			ResetEvent(hVideoBeeper);
			hBeepThread = NULL;
			return FALSE;
		}
	}
	return TRUE;
}

//消息回调处理函数
int CALLBACK MessageCallback(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen)
{
	BOOL bDisk = FALSE;
	CString csTemp;
	int i = 0;
	csTemp.Format("%s", sDVRIP);
	for (i=0; i<MAXIPNUMBER; i  )
	{
		if (strcmp(serverinfo[i].m_csServerIP, csTemp) == 0)
			break;
	}
	int nStartChan = serverinfo[i].m_lStartChannel;
	switch (lCommand) {
	case COMM_ALARM:
		NET_DVR_ALARMINFO m_alarminfo;
		memcpy(&m_alarminfo, pBuf, sizeof(NET_DVR_ALARMINFO));
		switch (m_alarminfo.dwAlarmType)
		{
		case 0:
			csTemp.Format("服务器%s发生信号量报警 报警输入%d ", sDVRIP, m_alarminfo.dwAlarmInputNumber 1);
			F_AddEvent(csTemp);
			TRACE(csTemp);
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwAlarmRelateChannel[i] == 1)
				{
					csTemp.Format("触发通道号%d ", i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}			
			break;
		case 1:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					csTemp.Format("服务器%s发生硬盘满报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 2:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生信号丢失报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 3:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生移动侦测报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
					
				}
			}
			
			break;
		case 4:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					csTemp.Format("服务器%s发生硬盘未格式化报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 5:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					bDisk = TRUE;
					csTemp.Format("服务器%s发生读写硬盘出错报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			if (bDisk == FALSE)
			{
				csTemp.Format("服务器%s发生未接硬盘出错报警 ", sDVRIP);
				F_AddEvent(csTemp);
				TRACE(csTemp);
			}
			bDisk = FALSE;			
			break;
		case 6:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生遮挡报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}			
			break;
		case 7:	
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生制式不匹配 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			break;
		case 8:
			csTemp.Format("服务器%s发生非法访问 ", sDVRIP);
			F_AddEvent(csTemp);
			TRACE(csTemp);			
			break;
		default:
			csTemp.Format("报警类型:未知 %d",m_alarminfo.dwAlarmType);
			F_AddEvent(csTemp);
			TRACE(csTemp);
			break;
		}
		if (!hBeepThread)
		{
			ResetEvent(hVideoBeeper);
//			hBeepThread = AfxBeginThread(Beeper,NULL);
		}
		csTemp.Format("%s", sDVRIP);
		for (i=0; i<16; i  )//只能对16台布防的设备显示灯
		{
			if (strcmp(serverinfo[i].m_csServerIP, csTemp) == 0)
					break;
		}
		if (i != MAX_CHANNUM)
		{
			if (ClientParam.m_iAlarmHandle[i] >= 0)
			{
				MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND);
			}
			else
			{
				MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
			}
		}
		break;
	case COMM_TRADEINFO:
		NET_DVR_TRADEINFO m_TradeInfo;
		memcpy(&m_TradeInfo, pBuf, sizeof(NET_DVR_TRADEINFO));
		csTemp.Format("服务器%s收到卡号信息%s ", sDVRIP, m_TradeInfo.CardNumber);
		F_AddEvent(csTemp);  
		TRACE(csTemp);
		break;
	default:
		break;
	}
	return 0;
}

//消息回调处理函数
int CALLBACK MessageCallback_EX(LONG lCommand,LONG lUserID,char *pBuf,DWORD dwBufLen)
{
	CString csTemp;
	CString sDVRIP;
	int i = 0;
	for (i=0; i<MAXIPNUMBER; i  )
	{
		if (serverinfo[i].m_lServerID == lUserID)
			break;
	}
	int nStartChan = serverinfo[i].m_lStartChannel;
	sDVRIP.Format("%s", serverinfo[i].m_csServerIP);
	switch (lCommand) {
	case COMM_ALARM:
		NET_DVR_ALARMINFO m_alarminfo;
		memcpy(&m_alarminfo, pBuf, sizeof(NET_DVR_ALARMINFO));
		switch (m_alarminfo.dwAlarmType)
		{
		case 0:
			csTemp.Format("服务器%s发生信号量报警 报警输入%d ", sDVRIP, m_alarminfo.dwAlarmInputNumber 1);
			F_AddEvent(csTemp);
			TRACE(csTemp);
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwAlarmRelateChannel[i] == 1)
				{
					csTemp.Format("触发通道号%d ", i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}			
			break;
		case 1:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					csTemp.Format("服务器%s发生硬盘满报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 2:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生信号丢失报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 3:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生移动侦测报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
					
				}
			}
			
			break;
		case 4:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					csTemp.Format("服务器%s发生硬盘未格式化报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 5:
			for (i=0; i<MAX_DISKNUM; i  )
			{
				if (m_alarminfo.dwDiskNumber[i] == 1)
				{
					csTemp.Format("服务器%s发生读写硬盘出错报警 硬盘号%d ", sDVRIP, i);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			
			break;
		case 6:
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生遮挡报警 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}			
			break;
		case 7:	
			for (i=0; i<MAX_CHANNUM; i  )
			{
				if (m_alarminfo.dwChannel[i] == 1)
				{
					csTemp.Format("服务器%s发生制式不匹配 通道号%d ", sDVRIP, i nStartChan);
					F_AddEvent(csTemp);
					TRACE(csTemp);
				}
			}
			break;
		case 8:
			csTemp.Format("服务器%s发生非法访问 ", sDVRIP);
			F_AddEvent(csTemp);
			TRACE(csTemp);			
			break;
		default:
			csTemp.Format("报警类型:未知 %d",m_alarminfo.dwAlarmType);
			F_AddEvent(csTemp);
			TRACE(csTemp);
			break;
		}
		if (!hBeepThread)
		{
			ResetEvent(hVideoBeeper);
//			hBeepThread = AfxBeginThread(Beeper,NULL);
		}
		csTemp.Format("%s", sDVRIP);
		for (i=0; i<16; i  )//只能对16台布防的设备显示灯
		{
			if (strcmp(serverinfo[i].m_csServerIP, csTemp) == 0)
					break;
		}
		if (i != MAX_CHANNUM)
		{
			if (ClientParam.m_iAlarmHandle[i] >= 0)
			{
				MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND);
			}
			else
			{
				MainDlg->m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
			}
		}
		break;
	default:
		break;
	}
	return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNewclientDlg dialog

CNewclientDlg::CNewclientDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNewclientDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CNewclientDlg)
	m_yzd = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CNewclientDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNewclientDlg)
	DDX_Control(pDX, IDC_COMBONETDELAY, m_NetDelayCtrl);
	DDX_Control(pDX, IDC_ALARMLED9, m_AlarmLed9);
	DDX_Control(pDX, IDC_ALARMLED8, m_AlarmLed8);
	DDX_Control(pDX, IDC_ALARMLED7, m_AlarmLed7);
	DDX_Control(pDX, IDC_ALARMLED6, m_AlarmLed6);
	DDX_Control(pDX, IDC_ALARMLED5, m_AlarmLed5);
	DDX_Control(pDX, IDC_ALARMLED4, m_AlarmLed4);
	DDX_Control(pDX, IDC_ALARMLED3, m_AlarmLed3);
	DDX_Control(pDX, IDC_ALARMLED2, m_AlarmLed2);
	DDX_Control(pDX, IDC_ALARMLED16, m_AlarmLed16);
	DDX_Control(pDX, IDC_ALARMLED15, m_AlarmLed15);
	DDX_Control(pDX, IDC_ALARMLED14, m_AlarmLed14);
	DDX_Control(pDX, IDC_ALARMLED13, m_AlarmLed13);
	DDX_Control(pDX, IDC_ALARMLED12, m_AlarmLed12);
	DDX_Control(pDX, IDC_ALARMLED11, m_AlarmLed11);
	DDX_Control(pDX, IDC_ALARMLED10, m_AlarmLed10);
	DDX_Control(pDX, IDC_ALARMLED1, m_AlarmLed1);
	DDX_Control(pDX, IDC_LED9, m_CapLed9);
	DDX_Control(pDX, IDC_LED8, m_CapLed8);
	DDX_Control(pDX, IDC_LED7, m_CapLed7);
	DDX_Control(pDX, IDC_LED6, m_CapLed6);
	DDX_Control(pDX, IDC_LED5, m_CapLed5);
	DDX_Control(pDX, IDC_LED4, m_CapLed4);
	DDX_Control(pDX, IDC_LED3, m_CapLed3);
	DDX_Control(pDX, IDC_LED2, m_CapLed2);
	DDX_Control(pDX, IDC_LED16, m_CapLed16);
	DDX_Control(pDX, IDC_LED15, m_CapLed15);
	DDX_Control(pDX, IDC_LED14, m_CapLed14);
	DDX_Control(pDX, IDC_LED13, m_CapLed13);
	DDX_Control(pDX, IDC_LED12, m_CapLed12);
	DDX_Control(pDX, IDC_LED11, m_CapLed11);
	DDX_Control(pDX, IDC_LED10, m_CapLed10);
	DDX_Control(pDX, IDC_LED1, m_CapLed1);
	DDX_Control(pDX, IDC_COMBOWNDNUM, m_windownum);
	DDX_Control(pDX, IDC_SLIDERYL, m_yl);
	DDX_Control(pDX, IDC_SLIDERSD, m_sd);
	DDX_Control(pDX, IDC_SLIDERLD, m_ld);
	DDX_Control(pDX, IDC_SLIDERDBD, m_dbd);
	DDX_Control(pDX, IDC_SLIDERBHD, m_bhd);
	DDX_Text(pDX, IDC_YZD, m_yzd);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CNewclientDlg, CDialog)
	//{{AFX_MSG_MAP(CNewclientDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	ON_BN_CLICKED(IDC_AUDIOEXCHANGE, OnAudioexchange)
	ON_BN_CLICKED(IDC_SYSTEMCFG, OnSystemcfg)
	ON_BN_CLICKED(IDC_PLAY, OnVideonetplay)
	ON_BN_CLICKED(IDC_GETPICTURE, OnGetpicture)
	ON_BN_CLICKED(IDC_RECORD, OnRecord)
	ON_BN_CLICKED(IDC_EVENTLIST, OnEventlist)
	ON_BN_CLICKED(IDC_BUTTONALARMSET, OnButtonalarmset)
	ON_BN_CLICKED(IDC_VIDEOFILEPLAY, OnVideofileplay)
	ON_WM_TIMER()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_BUTTONPOLL, OnButtonpoll)
	ON_BN_CLICKED(IDC_BUTTONYZW, OnButtonyzw)
	ON_CBN_SELCHANGE(IDC_COMBOWNDNUM, OnSelchangeCombowndnum)
	ON_CBN_SELCHANGE(IDC_COMBONETDELAY, OnSelchangeCombonetdelay)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTXH, OnButxh)
	ON_BN_CLICKED(IDC_BUTJPEGPIC, OnButjpegpic)
	ON_MESSAGE(WM_MYCOMMAND,OnMyCommand)
	ON_WM_MOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//wParam: 消息类型 lParam: 发生异常的索引值。 
void CNewclientDlg::OnMyCommand(WPARAM wParam, LPARAM lParam)
{
	char tempbuf[256];
	int i = 0;
	DWORD dwType = wParam;	//异常类型
	LONG lIndex = lParam;	//相对应得操作返回的句柄
	ZeroMemory(tempbuf,256);
	switch (dwType) 
	{
	case EXCEPTION_AUDIOEXCHANGE:	//语音对讲时网络异常
		sprintf(tempbuf,"语音对讲时网络异常!!!");
		TRACE("%s",tempbuf);
		if (lVoiceIndex != -1)
		{	
			if (lIndex == lVoiceIndex)
			{
				if (NET_DVR_StopVoiceCom(lVoiceIndex))
				{
					GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲");
					lVoiceIndex = -1;			
				}
				else
				{
					AfxMessageBox("停止语音对讲失败!");
				}
			}			
		}	
		break;
	case EXCEPTION_ALARM:			//报警上传时网络异常
		sprintf(tempbuf,"报警上传时网络异常!!!");
		TRACE("%s",tempbuf);
		for (i = 0; i < MAXIPNUMBER; i  )
		{				
			if (ClientParam.m_iAlarmHandle[i] >= 0)
			{
				if (lIndex == ClientParam.m_iAlarmHandle[i])
				{
					if (NET_DVR_CloseAlarmChan(ClientParam.m_iAlarmHandle[i]))
					{
						ClientParam.m_iAlarmHandle[i] = -1;
					}
					else
					{
						CString sTemp;
						sTemp.Format("%s报警撤防失败!",serverinfo[i].m_csServerName);
						AfxMessageBox(sTemp);
					}
					m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_DISABLED,CLed::LED_ROUND);
				}
			}
		}
		break;
	case EXCEPTION_PREVIEW:			//网络预览时异常
		sprintf(tempbuf,"网络预览时网络异常!!!");
		TRACE("%s",tempbuf);	
		if (ClientParam.m_bPlaying)
		{				
			for (i = 0; i < MAXVIEWNUM; i  )
			{
				if (lIndex == myoutput[i].m_iPlayhandle)
				{
					if (myoutput[i].m_bFileSave)
					{
						F_StopClientRecord(i);
					}
					myoutput[i].StopNet();
				}				
			}
		}
		break;
	case EXCEPTION_SERIAL:			//透明通道传输时异常
		sprintf(tempbuf,"透明通道传输时网络异常!!!");
		TRACE("%s",tempbuf);
		//TODO: 关闭透明通道

		break;
	case EXCEPTION_RECONNECT:		//预览的时候重连
		sprintf(tempbuf,"预览时网络重连!!!");
		TRACE("%s",tempbuf);
		
		break;
	default:
		break;
	}
}

// CNewclientDlg message handlers

BOOL CNewclientDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here
	int i,j;
	CString sTemp;
	NET_DVR_DEVICEINFO DeviceInfo;
	LONG lUserID = 0; 
	char csServerIP[16];
	char cUserName[100];
	char cPassword[100];
	BOOL bLogin = FALSE;
	char cTemp[100];
	DWORD dwReturned = 0;
	NET_DVR_NETCFG netcfg;

	nUseCard =0;
	m_byException = 0;
	hBrush=::CreateSolidBrush(COLORREF(0xff00ff));
	ZeroMemory(cWorkDir, 256);
	GetCurrentDirectory(256, cWorkDir);
	TRACE("cWordDir = %s", cWorkDir);
	
	CNewclientApp* pApp =  (CNewclientApp*)AfxGetApp();
	m_iHardDriverNum = pApp->m_iDriverNum;
	for (i = 0; i < m_iHardDriverNum; i  )
	{
		m_cHardDriver[i] = pApp->m_cHardDriver[i];
	}
	ClientParam.m_bCheckServerTime = FALSE;
	ClientParam.m_iCheckServerTime = 0;

	for (i = 0; i < MAXIPNUMBER; i  )
	{
		serverinfo[i].m_csServerName.Format(_T(""));
		serverinfo[i].m_iServerChannelNumber = -1;
		serverinfo[i].m_wServerPort = 8000;
		serverinfo[i].m_lServerID = -1;
		for (j = 0; j < MAXCHANNUM; j  )
		{
			allipinfo[i][j].m_lServerID = -1;
			allipinfo[i][j].m_iChannel = -1;
			allipinfo[i][j].m_iServerNum = -1;
			allipinfo[i][j].m_iChannelNum = -1;
			allipinfo[i][j].m_wServerport = 8000;
			allipinfo[i][j].m_bChoosed = FALSE;
			allipinfo[i][j].m_iSequence = -1;
		}
	}
	for (i=0; i<10; i  )
	{
		cTemp[i] = i;
	}
	
	ReadSurveillanceConfig();	
	for (i=0; i<MAXIPNUMBER; i  )
	{
		if (serverinfo[i].m_iServerChannelNumber >= 0)
		{
			strcpy(csServerIP, serverinfo[i].m_csServerIP);
			strncpy(cUserName, serverinfo[i].m_csServerAdminName, MAX_NAMELEN);
			strncpy(cPassword, serverinfo[i].m_csServerAdminPasswd, PASSWD_LEN);
			lUserID = NET_DVR_Login(csServerIP, serverinfo[i].m_wServerPort, cUserName, cPassword, &DeviceInfo);
			if (lUserID < 0)
			{
				CString sTemp;	
				int nErr = NET_DVR_GetLastError();  
				if (nErr == NET_DVR_PASSWORD_ERROR)
				{
					sTemp.Format("%s 用户名密码错误! ", csServerIP);
					TRACE(sTemp);
					AfxMessageBox(sTemp);
				}
				//TODO: 其他错误值
				else
				{
					sTemp.Format("%s 由于网络原因或DVR忙, 注册失败! ", csServerIP);
					TRACE(sTemp);
					AfxMessageBox(sTemp);
				}
			}
			else
			{
				//TRACE("csServerIP = %s lUserID = %d", csServerIP, lUserID);

				if (!NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_NETCFG, 0,&netcfg, sizeof(NET_DVR_NETCFG), &dwReturned))
				{
					CString sTemp;
					sTemp.Format("获取服务器配置信息失败: NET_DVR_GET_NETCFG = %d \n", NET_DVR_GetLastError());
					TRACE(sTemp);	
				}
				bLogin = TRUE;
				serverinfo[i].m_lServerID = lUserID;
				serverinfo[i].m_wServerType = DeviceInfo.byDVRType;
				serverinfo[i].m_lStartChannel = DeviceInfo.byStartChan;
				serverinfo[i].m_dwAlarmInNum = DeviceInfo.byAlarmInPortNum;
				serverinfo[i].m_dwAlarmOutNum = DeviceInfo.byAlarmOutPortNum;
				serverinfo[i].m_iServerChannelNumber = DeviceInfo.byChanNum;
				serverinfo[i].m_dwDiskNum = DeviceInfo.byDiskNum;
				serverinfo[i].m_csServerMultiIP = netcfg.sMultiCastIP;
				serverinfo[i].m_dwServerMultiIPvalue = inet_addr(netcfg.sMultiCastIP);
				ZeroMemory(cTemp, 100);
				memcpy(cTemp, DeviceInfo.sSerialNumber, SERIALNO_LEN);
				serverinfo[i].m_csSerialNumber.Format("%s", cTemp);
								
				for (j = 0; j < MAXCHANNUM; j  )
				{
					if (j < DeviceInfo.byChanNum)
					{
						allipinfo[i][j].m_lServerID = lUserID;
						allipinfo[i][j].m_csChanName.Format("通道%d",(j DeviceInfo.byStartChan));
						allipinfo[i][j].m_iChannel = j DeviceInfo.byStartChan;
						allipinfo[i][j].m_csMultiIP = netcfg.sMultiCastIP;
						allipinfo[i][j].m_dwMultiIPvalue = inet_addr(allipinfo[i][j].m_csMultiIP);
						if ( (allipinfo[i][j].m_bChoosed) && (allipinfo[i][j].m_iSequence != -1) )
						{
							selipinfo[allipinfo[i][j].m_iSequence].m_bChoosed = allipinfo[i][j].m_bChoosed;
							selipinfo[allipinfo[i][j].m_iSequence].m_csChanName = allipinfo[i][j].m_csChanName;
							selipinfo[allipinfo[i][j].m_iSequence].m_csIP = allipinfo[i][j].m_csIP;
							selipinfo[allipinfo[i][j].m_iSequence].m_csMultiIP = allipinfo[i][j].m_csMultiIP;
							selipinfo[allipinfo[i][j].m_iSequence].m_csPassword = allipinfo[i][j].m_csPassword;
							selipinfo[allipinfo[i][j].m_iSequence].m_csUser = allipinfo[i][j].m_csUser;
							selipinfo[allipinfo[i][j].m_iSequence].m_dwAddress = allipinfo[i][j].m_dwAddress;
							selipinfo[allipinfo[i][j].m_iSequence].m_dwAlarmlevel = allipinfo[i][j].m_dwAlarmlevel;
							selipinfo[allipinfo[i][j].m_iSequence].m_dwIPvalue = allipinfo[i][j].m_dwIPvalue;
							selipinfo[allipinfo[i][j].m_iSequence].m_dwMultiIPvalue = allipinfo[i][j].m_dwMultiIPvalue;
							selipinfo[allipinfo[i][j].m_iSequence].m_dwProtocol = allipinfo[i][j].m_dwProtocol;
							selipinfo[allipinfo[i][j].m_iSequence].m_iChannel = allipinfo[i][j].m_iChannel;
							selipinfo[allipinfo[i][j].m_iSequence].m_iSequence = allipinfo[i][j].m_iSequence;
							selipinfo[allipinfo[i][j].m_iSequence].m_lServerID = allipinfo[i][j].m_lServerID;
							selipinfo[allipinfo[i][j].m_iSequence].m_wJMQtype = allipinfo[i][j].m_wJMQtype;
							selipinfo[allipinfo[i][j].m_iSequence].m_wServerport = allipinfo[i][j].m_wServerport;
							selipinfo[allipinfo[i][j].m_iSequence].m_iServerNum = i;
							selipinfo[allipinfo[i][j].m_iSequence].m_iChannelNum = j;
							iSurveillanceNumber  ;
							//TRACE("m_iSequence = %d csServerIP = %s m_lServerID = %d", allipinfo[i][j].m_iSequence, selipinfo[allipinfo[i][j].m_iSequence].m_csIP, selipinfo[allipinfo[i][j].m_iSequence].m_lServerID);
						}
					}
					else
					{
						allipinfo[i][j].m_lServerID = -1;
						allipinfo[i][j].m_csChanName.Format("");
						allipinfo[i][j].m_iChannel = -1;
					}
				}
			}
		}
	}

	ClientParam.m_bCyclePlay = FALSE;
	ClientParam.m_iCycleTime = 20;
	ClientParam.m_bUseCard = FALSE;
	ClientParam.m_bNTSC = FALSE;
	ClientParam.m_bAutoRecord = FALSE;
	ClientParam.m_bCycleRecord = FALSE;
	ClientParam.m_iRecordFileInterval = 60;
	ClientParam.m_iStartRecordDriver = 0;
	ClientParam.m_iEndRecordDriver = m_iHardDriverNum - 1;
	ClientParam.m_csDownLoadPath.Format(_T("C:\\DownLoad"));
	ClientParam.m_csPictureSavePath.Format(_T("C:\\Picture"));
	ClientParam.m_csLogSavePath.Format(_T("C:\\EventLog"));
	sTemp.Format("%s\\", ClientParam.m_csDownLoadPath);
	CreateDirectory(sTemp, NULL);
	sTemp.Format("%s\\", ClientParam.m_csPictureSavePath);
	CreateDirectory(sTemp, NULL);
	sTemp.Format("%s\\", ClientParam.m_csLogSavePath);
	CreateDirectory(sTemp, NULL);
	for (i = 0; i < 7; i  ) 
	{
		for (j = 0; j < 4; j  )
		{
			ClientParam.m_ClientRecordTime[i][j].m_iStartHour = 0;
			ClientParam.m_ClientRecordTime[i][j].m_iStartMinute = 0;
			ClientParam.m_ClientRecordTime[i][j].m_iStartTime = 0;
			ClientParam.m_ClientRecordTime[i][j].m_iStopHour = 0;
			ClientParam.m_ClientRecordTime[i][j].m_iStopMinute = 0;
			ClientParam.m_ClientRecordTime[i][j].m_iStopTime = 0;
		}
	}
	ClientParam.m_bAllDiskFull = FALSE;
	ClientParam.m_bPlaying = FALSE;
	ClientParam.m_bCycling = FALSE;
	ClientParam.m_bNextPage = FALSE;
	ClientParam.m_bFrontPage = FALSE;
	ClientParam.m_bEnlarged = FALSE;
	ClientParam.m_bFullScreen = FALSE;
	ClientParam.m_bMultiScreen = FALSE;
	for (i = 0; i < MAXIPNUMBER; i  )
		ClientParam.m_iAlarmHandle[i] = -1;
	for (i = 0; i < MAXVIEWNUM; i  )
	{
		ClientParam.m_VideoInfo[i].m_iBrightness = DEFAULTBRIGHTNESS;
		ClientParam.m_VideoInfo[i].m_iContrast = DEFAULTCONTRAST;
		ClientParam.m_VideoInfo[i].m_iSaturation = DEFAULTSATURATION;
		ClientParam.m_VideoInfo[i].m_iHue = DEFAULTHUE;
	}
	ClientParam.m_Volume = DEFAULTVOLUME;
	ReadClientConfig();
	
	m_cCurrentRecordDriver = m_cHardDriver[ClientParam.m_iStartRecordDriver];
	autorecordtimer = 0;
	autorecordtimer = SetTimer(AUTORECORD_TIMER, 2000, NULL);
	if (ClientParam.m_bCheckServerTime)
	{
		TRACE("启动硬盘录像机校时时钟,校时时间是每天的%06d", ClientParam.m_iCheckServerTime);
		checkservertimer = 0;
		checkservertimer = SetTimer(CHECKSERVER_TIMER, 1000, NULL);
	}
	for (i = 0; i < MAXALARMIN; i  )
	{
		alarminfo[i].m_csIP.Format(_T(""));
		alarminfo[i].m_csUsername.Format(_T(""));
		alarminfo[i].m_csPassword.Format(_T(""));
		alarminfo[i].m_lServerID = -1;
		alarminfo[i].m_iChannel = -1;
		alarminfo[i].m_iAlarmLevel = -1;
		alarminfo[i].m_iAlarmType = -1;
		alarminfo[i].m_iPortIndex = -1;
		alarminfo[i].m_wServerPort = 8000;
	}
	m_iAlarmNumber = 0;	
	
	m_ld.SetRange(1,10,TRUE);
	m_sd.SetRange(1,10,TRUE);
	m_bhd.SetRange(1,10,TRUE);
	m_dbd.SetRange(1,10,TRUE);
	m_yl.SetRange(1,100,TRUE);
	m_ld.SetPos(DEFAULTBRIGHTNESS);
	m_sd.SetPos(DEFAULTHUE);
	m_bhd.SetPos(DEFAULTSATURATION);
	m_dbd.SetPos(DEFAULTCONTRAST);
	m_yl.SetPos(DEFAULTVOLUME);
	
	m_mybuttonup.SubclassDlgItem(IDC_BUTTONUP,this);
	m_mybuttondown.SubclassDlgItem(IDC_BUTTONDOWN,this);
	m_mybuttonleft.SubclassDlgItem(IDC_BUTTONLEFT,this);
	m_mybuttonright.SubclassDlgItem(IDC_BUTTONRIGHT,this);	
	m_mybuttontjright.SubclassDlgItem(IDC_BUTTONTJRIGHT,this);
	m_mybuttontjleft.SubclassDlgItem(IDC_BUTTONTJLEFT,this);
	m_mybuttonjjleft.SubclassDlgItem(IDC_BUTTONJJLEFT,this);
	m_mybuttonjjright.SubclassDlgItem(IDC_BUTTONJJRIGHT,this);
	m_mybuttongqleft.SubclassDlgItem(IDC_BUTTONGQLEFT,this);
	m_mybuttongqright.SubclassDlgItem(IDC_BUTTONGQRIGHT,this);
	
	InitLed();
	for (i=0;i<MAXVIEWNUM;i  )
	{
		myoutput[i].Create(IDD_MYOUTPUT,this);
	}
	m_windownum.SetCurSel(2);
	WINDOWNUM = 9;
	channelcount = 0;
	if (ClientParam.m_bUseCard) 
	{
		F_InitDecodeCard();
	}
	mycurwin.Create(IDD_CURWIN,this);
	ArrayWindow(0,WINDOWNUM);
	MoveCurWin(WINDOWNUM,0);
	
	hVideoBeeper=NULL;		//报警事件
	hBeepThread=NULL;		//报警线程
	hVideoBeeper = ::CreateEvent(NULL,         // no security attributes
		TRUE,         // auto-reset event
		FALSE,         // initial state is signaled
		NULL        // object name 
		); 
	ResetEvent(hVideoBeeper);
	
	freespacetimer = 0;
	freespacetimer = SetTimer(FREESPACE_TIMER, 5000, NULL);
	fileintervaltimer = 0;
	fileintervaltimer = SetTimer(FILEINTERVAL_TIMER, 2000, NULL);
	//SDK中收到DVR发过来的信息需要上传的通过回调函数实现,比如报警信息,日志信息等。
	NET_DVR_SetDVRMessCallBack(MessageCallback);
	//SDK中检测到异常通过消息的方式上传,比如网络断开
	NET_DVR_SetDVRMessage(WM_MYCOMMAND,this->m_hWnd);
	// 设置连接的超时设置
	NET_DVR_SetConnectTime(5000,1);
	//7200端口是监听端口
	if (!NET_DVR_StartListen(NULL,7200))
	{
		CString sTemp;
		sTemp.Format("ERROR: NET_DVR_StartListen = %d \n", NET_DVR_GetLastError());
		AfxMessageBox(sTemp);
	}

	cycletimer = 0;
	m_NetDelayCtrl.SetCurSel(g_nNetDelay);

	pDecHandle = pEncHandle = NULL;
	pEncHandle = NET_DVR_InitG722Encoder();
	pDecHandle = NET_DVR_InitG722Decoder(16000);

	MainDlg = this;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CNewclientDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CNewclientDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon   1) / 2;
		int y = (rect.Height() - cyIcon   1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CNewclientDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CNewclientDlg::OnExit() 
{
	// TODO: Add your control notification handler code here
	if (IDOK != MessageBox("确定要退出吗?","警告",IDOK))
		return;

	int i = 0;
	F_StopPlay();
	if (lVoiceIndex != -1)
	{
		if (NET_DVR_StopVoiceCom(lVoiceIndex))
		{
			GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲");
			lVoiceIndex = -1;			
		}
		else
		{
			AfxMessageBox("停止语音对讲失败!");
		}
	}	

	if (cycletimer)
	{
		KillTimer(CYCLE_TIMER); 
		cycletimer = 0;
	}
	if (freespacetimer)
	{
		KillTimer(FREESPACE_TIMER);
		freespacetimer = 0;
	}
	if (fileintervaltimer)
	{
		KillTimer(FILEINTERVAL_TIMER);
		fileintervaltimer = 0;
	}
	if (checkservertimer)
	{
//		TRACE("关闭校时时钟");
		KillTimer(CHECKSERVER_TIMER);
		checkservertimer = 0;
	}
	if (hVideoBeeper)
		SetEvent(hVideoBeeper);
	if (ClientParam.m_bUseCard)
	{
		NET_DVR_ReleaseDevice_Card();
		NET_DVR_ReleaseDDraw_Card();
	}
	 
	NET_DVR_StopListen(); 
	for (i=0; i<MAXIPNUMBER; i  )  
	{
		if (serverinfo[i].m_iServerChannelNumber >= 0)
		{
			if (serverinfo[i].m_lServerID != -1)
			{
				if (ClientParam.m_iAlarmHandle[i] >= 0)
				{
					if (NET_DVR_CloseAlarmChan(ClientParam.m_iAlarmHandle[i]))
					{
						ClientParam.m_iAlarmHandle[i] = -1;
					}
				}

				if (!NET_DVR_Logout(serverinfo[i].m_lServerID))
				{ 
					CString sTemp;	
					sTemp.Format("ERROR: %s NET_DVR_Logout = %d",serverinfo[i].m_csServerIP, NET_DVR_GetLastError());
					TRACE(sTemp); 
				}  
			}
		}
	}

	NET_DVR_ReleaseG722Decoder(pDecHandle);
	NET_DVR_ReleaseG722Encoder(pEncHandle);
	CDialog::OnCancel(); 
}

void CNewclientDlg::ArrayWindow(WORD iPos, WORD iNumber)
{
	int i = 0;
	CRect crect;
	GetClientRect(&crect);
	WORD iWidth,iHeight;
	NET_DVR_DISPLAY_PARA displaypara;
	
	for (i = 0;i < MAXVIEWNUM;i  )
	{
	   myoutput[i].ShowWindow(SW_HIDE);
	}
	
	switch (iNumber)
	{
	case 4:
		if (ClientParam.m_bMultiScreen)
		{
			iWidth = 510;
			iHeight = 383;
			MYVIEW_LEFT = 0;
			MYVIEW_TOP = 0;
		}
		else
		{
			MYVIEW_LEFT = 20;
			MYVIEW_TOP = 20;
			iWidth = 354;
			iHeight = 290;
		}		
		bLargeWnd = FALSE;
		for (i = 0; i < 2; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT i*iWidth i*3,MYVIEW_TOP,iWidth,iHeight,true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT i*iWidth i*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i = 2; i < 4; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-2)*iWidth (i-2)*3,MYVIEW_TOP iHeight 2,iWidth,iHeight,true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-2)*iWidth (i-2)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP iHeight 2;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		break;
	case 9:
		if (ClientParam.m_bMultiScreen)
		{
			iWidth = 339;
			iHeight = 254;
			MYVIEW_LEFT = 0;
			MYVIEW_TOP = 0;
		}
		else
		{
			iWidth = 234;
			iHeight = 192;
			MYVIEW_LEFT = 20;
			MYVIEW_TOP = 20;
		}
	
		bLargeWnd = FALSE;
		for (i=0;i<3;i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT i*iWidth i*3,MYVIEW_TOP,iWidth,iHeight,true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT i*iWidth i*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i=3;i<6;i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-3)*iWidth (i-3)*3,MYVIEW_TOP iHeight 2,iWidth,iHeight,true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-3)*iWidth (i-3)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP iHeight 2;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i=6;i<9;i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-6)*iWidth (i-6)*3,MYVIEW_TOP 2*iHeight 4,iWidth,iHeight,true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-6)*iWidth (i-6)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP (iHeight 2)*2;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		break;
	case 16:
		if (ClientParam.m_bMultiScreen)
		{
			iWidth = 254;
			iHeight = 190;
			MYVIEW_LEFT = 0;
			MYVIEW_TOP = 0;
		}
		else
		{
			MYVIEW_LEFT = 20;
			MYVIEW_TOP = 20;
			iWidth = 178;//176;
			iHeight = 146;//144;
		}
		bLargeWnd = FALSE;
		for (i = 0; i < 4; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT i*iWidth i*3, MYVIEW_TOP, iWidth, iHeight, true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT i*iWidth i*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i = 4; i < 8; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-4)*iWidth (i-4)*3, MYVIEW_TOP iHeight 2, iWidth, iHeight, true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-4)*iWidth (i-4)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP iHeight 2;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i = 8; i < 12; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-8)*iWidth (i-8)*3, MYVIEW_TOP iHeight*2 4, iWidth, iHeight, true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-8)*iWidth (i-8)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP (iHeight 2)*2;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		for (i = 12; i < 16; i  )
		{
			myoutput[i].MoveWindow(MYVIEW_LEFT (i-12)*iWidth (i-12)*3, MYVIEW_TOP iHeight*3 6, iWidth, iHeight, true);
			myoutput[i].m_display_para.nLeft = MYVIEW_LEFT (i-12)*iWidth (i-12)*3/*-2*/;
			myoutput[i].m_display_para.nTop = MYVIEW_TOP (iHeight 2)*3;
			myoutput[i].m_display_para.nWidth = iWidth/* 2*/;
			myoutput[i].m_display_para.nHeight = iHeight;
			myoutput[i].ShowWindow(SW_SHOW);
		}
		break;
	case 1:
		//	wndsize为TRUE时,表示画面中的某个窗口放大;
		//	wndsize为FALSE时,表示画面只有一个窗口,也就不需要放大、缩小;
		if (ClientParam.m_bMultiScreen)
		{
			iWidth = 1024;
			iHeight = 768;
			MYVIEW_LEFT = 0;
			MYVIEW_TOP = 0;
		}
		else
		{
			MYVIEW_LEFT = 20;
			MYVIEW_TOP = 20;
			iWidth = 706;
			iHeight = 578;
		}
				
		myoutput[iPos].MoveWindow(MYVIEW_LEFT,MYVIEW_TOP,iWidth,iHeight,true);
		myoutput[iPos].m_display_para.nLeft = MYVIEW_LEFT;
		myoutput[iPos].m_display_para.nTop = MYVIEW_TOP;
		myoutput[iPos].m_display_para.nWidth = iWidth;
		myoutput[iPos].m_display_para.nHeight = iHeight;
		myoutput[iPos].ShowWindow(SW_SHOW);
		break;
	default:
		break;
	}
	if (ClientParam.m_bUseCard)
	{
		TRACE("Use Decode Card");
		TRACE("iNumber = %d", iNumber);
		NET_DVR_ClearSurface_Card();
		for (i = 0; i < MAXVIEWNUM; i  )
		{
			displaypara.bToScreen = 0;
			displaypara.bToVideoOut = 1;
			displaypara.nLeft = myoutput[i].m_display_para.nLeft;
			displaypara.nTop = myoutput[i].m_display_para.nTop;
			displaypara.nWidth = myoutput[i].m_display_para.nWidth;
			displaypara.nHeight = myoutput[i].m_display_para.nHeight;
			NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara);
		}
		if (iNumber == 1)
		{//放大
			displaypara.bToScreen = 1;
			displaypara.bToVideoOut = 1;
			displaypara.nLeft = myoutput[iPos].m_display_para.nLeft;
			displaypara.nTop = myoutput[iPos].m_display_para.nTop;
			displaypara.nWidth = myoutput[iPos].m_display_para.nWidth;
			displaypara.nHeight = myoutput[iPos].m_display_para.nHeight;
			NET_DVR_ResetPara_Card(myoutput[iPos].m_iPlayhandle,&displaypara);
		}
		else
		{//缩小
			for (i = 0; i < iNumber; i  )
			{
				displaypara.bToScreen = 1;
				displaypara.bToVideoOut = 1;
				displaypara.nLeft = myoutput[i].m_display_para.nLeft;
				displaypara.nTop = myoutput[i].m_display_para.nTop;
				displaypara.nWidth = myoutput[i].m_display_para.nWidth;
				displaypara.nHeight = myoutput[i].m_display_para.nHeight;
				NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara);
			}
		}
	}
}

void CNewclientDlg::MoveCurWin(int iWindowNum,int iCurWinPos)
{
	CNewclientDlg*  mainwnd =(CNewclientDlg*) AfxGetMainWnd();	
	int rectWidth = 0;
	int	rectHeight = 0;
	int	rectTop = 0;
	int	rectLeft = 0;
	switch (iWindowNum)
	{
	case 1:
		rectWidth = 706;
		rectHeight = 578;
		rectTop = MYVIEW_TOP;
		rectLeft = MYVIEW_LEFT;
		break;
	case 4:
		rectWidth = 354;
		rectHeight = 290;
		switch (iCurWinPos)
		{
		case 0:
		case 1:
			rectTop  = MYVIEW_TOP;
			rectLeft = MYVIEW_LEFT iCurWinPos*rectWidth iCurWinPos*3; 
			break;
		case 2:
		case 3:
			rectTop  = MYVIEW_TOP rectHeight 2;
			rectLeft = MYVIEW_LEFT (iCurWinPos-2)*rectWidth (iCurWinPos-2)*3; 
			break;	
		default:	
			break;	
		}
		break;
	case 9:
		rectWidth = 234;
		rectHeight = 192;
		switch (iCurWinPos)
		{
		case 0:
		case 1:
		case 2:
			rectTop  = MYVIEW_TOP;
			rectLeft = MYVIEW_LEFT iCurWinPos*rectWidth iCurWinPos*3; 
			break;
		case 3:
		case 4:
		case 5:
			rectTop  = MYVIEW_TOP rectHeight   2;
			rectLeft = MYVIEW_LEFT (iCurWinPos-3)*rectWidth (iCurWinPos-3)*3; 
			break;
		case 6:
		case 7:
		case 8:
			rectTop  = MYVIEW_TOP 2*rectHeight 4;
			rectLeft = MYVIEW_LEFT (iCurWinPos-6)*rectWidth (iCurWinPos-6)*3; 
			break;
		default:
			break;
		}
		break;
	case 16:
		rectWidth = 178;
		rectHeight = 146;
		switch (iCurWinPos)
		{
		case 0:
		case 1:
		case 2:
		case 3:
			rectTop  = MYVIEW_TOP;
			rectLeft = MYVIEW_LEFT iCurWinPos*rectWidth iCurWinPos*3; 
			break;
		case 4:
		case 5:
		case 6:
		case 7:
			rectTop  = MYVIEW_TOP rectHeight 2;
			rectLeft = MYVIEW_LEFT (iCurWinPos-4)*rectWidth (iCurWinPos-4)*3; 
			break;
		case 8:
		case 9:
		case 10:
		case 11:
			rectTop  = MYVIEW_TOP 2*rectHeight 4;
			rectLeft = MYVIEW_LEFT (iCurWinPos-8)*rectWidth (iCurWinPos-8)*3; 
			break;
		case 12:
		case 13:
		case 14:
		case 15:
			rectTop  = MYVIEW_TOP 3*rectHeight 6;
			rectLeft = MYVIEW_LEFT (iCurWinPos-12)*rectWidth (iCurWinPos-12)*3; 
			break;
		default:
			break;
		}
		break;
	default:
		break; 
	}
	mycurwin.m_black.ShowWindow(SW_HIDE);
	mycurwin.MoveWindow(rectLeft-1,rectTop-1,rectWidth 2,rectHeight 2);
	mycurwin.m_black.ShowWindow(SW_SHOW);
	mycurwin.EnableWindow(FALSE);
}
void CNewclientDlg::InitLed()
{
	int i;
	m_pCapLed[0] = &m_CapLed1;
	m_pCapLed[1] = &m_CapLed2;
	m_pCapLed[2] = &m_CapLed3;
	m_pCapLed[3] = &m_CapLed4;
	m_pCapLed[4] = &m_CapLed5;
	m_pCapLed[5] = &m_CapLed6;
	m_pCapLed[6] = &m_CapLed7;
	m_pCapLed[7] = &m_CapLed8;
	m_pCapLed[8] = &m_CapLed9;
	m_pCapLed[9] = &m_CapLed10;
	m_pCapLed[10] = &m_CapLed11;
	m_pCapLed[11] = &m_CapLed12;
	m_pCapLed[12] = &m_CapLed13;
	m_pCapLed[13] = &m_CapLed14;
	m_pCapLed[14] = &m_CapLed15;
	m_pCapLed[15] = &m_CapLed16;

	for (i = 0; i < MAXVIEWNUM; i  )
	{
		m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
	}
	m_pAlarmLed[0] = &m_AlarmLed1; 
	m_pAlarmLed[1] = &m_AlarmLed2;
	m_pAlarmLed[2] = &m_AlarmLed3;
	m_pAlarmLed[3] = &m_AlarmLed4;
	m_pAlarmLed[4] = &m_AlarmLed5;
	m_pAlarmLed[5] = &m_AlarmLed6;
	m_pAlarmLed[6] = &m_AlarmLed7;
	m_pAlarmLed[7] = &m_AlarmLed8;
	m_pAlarmLed[8] = &m_AlarmLed9;
	m_pAlarmLed[9] = &m_AlarmLed10;
	m_pAlarmLed[10] = &m_AlarmLed11;
	m_pAlarmLed[11] = &m_AlarmLed12;
	m_pAlarmLed[12] = &m_AlarmLed13;
	m_pAlarmLed[13] = &m_AlarmLed14;
	m_pAlarmLed[14] = &m_AlarmLed15;
	m_pAlarmLed[15] = &m_AlarmLed16;
	
	for (i = 0; i < MAXVIEWNUM; i  )
	{
		m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
	}
}
void CNewclientDlg::F_InitDecodeCard()
{
	int nDispNum = 0;
	TRACE("初始化解码卡");
	int iRet = NET_DVR_InitDDraw_Card(this->m_hWnd,0xff00ff);
	
	iRet=NET_DVR_InitDevice_Card(&channelcount);
	
	TRACE("ChannelCount = %d", channelcount);	
	if (channelcount <= 0)
	{
		AfxMessageBox("请插入解码卡!");
		return;
	}
	else if (channelcount > 16)
	{
		channelcount = 16;
	}
	if(ClientParam.m_bNTSC)
	{
		nDispNum = GetDisplayChannelCount();
		if (nDispNum >= 2)
		{
			REGION_PARAM param[MAX_DISPLAY_REGION];
			int i;
			memset(param, 0, sizeof(param));
			for (i=0; i<MAX_DISPLAY_REGION; i  )
				param[i].color = RGB(i, i*8, i*16);
			for (i=0; i<nDispNum/2; i  )
			{
				SetDisplayStandard(2*i,StandardNTSC);
				param[0].left=0;	param[0].top=0;		param[0].width=320;		param[0].height=240;
				param[1].left=320;	param[1].top=0;		param[1].width=320;		param[1].height=240;
				param[2].left=0;	param[2].top=240;	param[2].width=320;		param[2].height=240;
				param[3].left=320;	param[3].top=240;	param[3].width=320;		param[3].height=240;
				if (SetDisplayRegion(2*i, 4, param, 0) != HWERR_SUCCESS)
				{
					TRACE("SetDisplayRegion failed!");
				}				
				SetDecoderVideoExtOutput(4*i, 0, 1, 2*i, 0, 0);
				SetDecoderVideoExtOutput(4*i 1, 0, 1, 2*i, 1, 0);		
				SetDecoderVideoExtOutput(4*i 2, 0, 1, 2*i, 2, 0);
				SetDecoderVideoExtOutput(4*i 3, 0, 1, 2*i, 3, 0);

				SetDisplayStandard(2*i 1,StandardNTSC);
				param[0].left=0;	param[0].top=0;		param[0].width=704;		param[0].height=480;
				if (SetDisplayRegion(2*i 1, 1, param, 0) != HWERR_SUCCESS)
				{
					TRACE("SetDisplayRegion failed!");
				}
				
				SetDecoderVideoExtOutput(4*i, 1, 1, 2*i 1, 0, 0);		
			}			
		}
	}
	else
	{
		nDispNum = GetDisplayChannelCount();
		if (nDispNum >= 2)
		{
			REGION_PARAM param[MAX_DISPLAY_REGION];
			int i;
			memset(param, 0, sizeof(param));
			for (i=0; i<MAX_DISPLAY_REGION; i  )
				param[i].color = RGB(i, i*8, i*16);
			for (i=0; i<nDispNum/2; i  )
			{
				SetDisplayStandard(2*i,StandardPAL);
				param[0].left=0;	param[0].top=0;		param[0].width=352;		param[0].height=288;
				param[1].left=352;	param[1].top=0;		param[1].width=352;		param[1].height=288;
				param[2].left=0;	param[2].top=288;	param[2].width=352;		param[2].height=288;
				param[3].left=352;	param[3].top=288;	param[3].width=352;		param[3].height=288;
				if (SetDisplayRegion(2*i, 4, param, 0) != HWERR_SUCCESS)
				{
					TRACE("SetDisplayRegion failed!");
				}				
				SetDecoderVideoExtOutput(4*i, 0, 1, 2*i, 0, 0);
				SetDecoderVideoExtOutput(4*i 1, 0, 1, 2*i, 1, 0);		
				SetDecoderVideoExtOutput(4*i 2, 0, 1, 2*i, 2, 0);
				SetDecoderVideoExtOutput(4*i 3, 0, 1, 2*i, 3, 0);

				SetDisplayStandard(2*i 1,StandardPAL);
				param[0].left=0;	param[0].top=0;		param[0].width=704;		param[0].height=576;
				if (SetDisplayRegion(2*i 1, 1, param, 0) != HWERR_SUCCESS)
				{
					TRACE("SetDisplayRegion failed!");
				}
				
				SetDecoderVideoExtOutput(4*i, 1, 1, 2*i 1, 0, 0);		
			}			
		}
	}
	
	
	if (channelcount==1)
	{
		WINDOWNUM=1;
		m_windownum.SetCurSel(0); 
	}
	else if (channelcount<=4)
	{
		WINDOWNUM=4;
		m_windownum.SetCurSel(1);
	}
	else if (channelcount<=9)
	{
		WINDOWNUM = 9;
		m_windownum.SetCurSel(2);
	}
	else
	{
		m_windownum.SetCurSel(3);
		WINDOWNUM = 16;
	}
	
}


void CNewclientDlg::OnAudioexchange() 
{
	// TODO: Add your control notification handler code here
	if (lVoiceIndex == -1)
	{
		CVoiceExchange VoiceDlg;
		VoiceDlg.DoModal();
		if (lVoiceIndex != -1)
		{	
			GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("停止对讲");
		}
	}
	else
	{	
		if (NET_DVR_StopVoiceCom(lVoiceIndex))
		{
			GetDlgItem(IDC_AUDIOEXCHANGE)->SetWindowText("语音对讲");
			lVoiceIndex = -1;			
		}
		else
		{
			AfxMessageBox("停止语音对讲失败!");
		}
	}	
}

void CNewclientDlg::OnSystemcfg()  
{
	// TODO: Add your control notification handler code here
	CSystemConfig	SysCfgDlg;
	SysCfgDlg.DoModal();

	if (nUseCard == 1)
	{
		channelcount = 0;
		F_InitDecodeCard();
		ArrayWindow(0,WINDOWNUM);
		MoveCurWin(WINDOWNUM,0);
		nUseCard = 0;
	}
	if (nUseCard == 2)
	{
		NET_DVR_ReleaseDevice_Card();
		NET_DVR_ReleaseDDraw_Card();
		nUseCard = 0;
	}
	if (ClientParam.m_bCheckServerTime)
	{
		if (checkservertimer == 0)
		{
			TRACE("启动硬盘录像机校时时钟,校时时间是每天的%06d", ClientParam.m_iCheckServerTime);
			checkservertimer = SetTimer(CHECKSERVER_TIMER, 1000, NULL);
		}
	}
	else
	{
		if (checkservertimer)
		{
//			TRACE("关闭硬盘录像机校时时钟");
			KillTimer(CHECKSERVER_TIMER);
			checkservertimer = 0;
		}
	}
	F_JudgeDiskFull();
}

void CNewclientDlg::OnSelchangeCombowndnum() 
{
	// TODO: Add your control notification handler code here
	int i;
	WORD	wndnum;
	i = m_windownum.GetCurSel();
	switch (i)
	{
	case 0:
		wndnum = 1;
		break;
	case 1:
		wndnum = 4;
		break;
	case 2:
		wndnum = 9;
		break;
	case 3:
		wndnum = 16;
		break;
	default:
		break;
	}
	if (WINDOWNUM != wndnum)
	{
		WINDOWNUM = wndnum;
		if (ClientParam.m_bCycling)
		{
			AfxMessageBox("请停止循环播放!");
			return;
		}
/*		if (ClientParam.m_bPlaying)
		{
			TRACE("Stop Play");
			F_StopPlay();
			OnVideonetplay();
		}
*/
		for (i = 0; i < MAXVIEWNUM; i  )
		{
			if (myoutput[i].m_iPlayhandle != -1)
			{
//				NET_DVR_RealPlayPause(myoutput[i].m_iPlayhandle);
			}
		}
		ArrayWindow(0, WINDOWNUM);
		MoveCurWin(WINDOWNUM,0);
		for (i = 0; i < WINDOWNUM; i  )
		{
			if (myoutput[i].m_iPlayhandle != -1)
			{
//				NET_DVR_RealPlayRestart(myoutput[i].m_iPlayhandle);
			}
		}	
	}
}

void CNewclientDlg::F_StopPlay()
{
	int i;
	
	if (cycletimer)
	{
		KillTimer(CYCLE_TIMER);
		cycletimer = 0;
	}
	if (!ClientParam.m_bUseCard)
	{
		if (!g_bShareSound)
			NET_DVR_CloseSound();
	}
	
	for (i = 0; i < MAXVIEWNUM; i  )
	{
		if (myoutput[i].m_bFileSave)
			F_StopClientRecord(i);
		if (g_bShareSound)
			NET_DVR_CloseSoundShare(myoutput[i].m_iPlayhandle);
		myoutput[i].StopNet();
	}
	GetDlgItem(IDC_PLAY)->SetWindowText("预览");
	numberpos = 0;				
	if ( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) )
	{
		ArrayWindow(0, WINDOWNUM);
		MoveCurWin(WINDOWNUM,0);
	} 
	
	ClientParam.m_bPlaying = FALSE;
	ClientParam.m_bCycling = FALSE;
	ClientParam.m_bPaused = FALSE;
	ClientParam.m_bNextPage = FALSE;
	ClientParam.m_bFrontPage = FALSE;
	GetDlgItem(IDC_COMBOWNDNUM)->EnableWindow(TRUE);
}

void CNewclientDlg::OnVideonetplay() 
{
	// TODO: Add your control notification handler code here
	int itemp,i;
	UpdateData(TRUE);
	
	if (iSurveillanceNumber == 0)
		return;
	if (ClientParam.m_bPlaying)
	{
		TRACE("Stop Play");
		F_StopPlay();
		return;
	}
	GetDlgItem(IDC_COMBOWNDNUM)->EnableWindow(FALSE);
	ClientParam.m_bPlaying = TRUE;
	
	if (iSurveillanceNumber < WINDOWNUM)
		itemp = iSurveillanceNumber;
	else
		itemp = WINDOWNUM;
	
	for (i=0;i<itemp;i  )      
	{
		myoutput[i].m_lIndex = i;
		nCnt = i;
		if (ClientParam.m_bUseCard) 
			myoutput[i].StartCard(&selipinfo[i]);
		else
		{
			TRACE("start play %s m_lServerId = %d", selipinfo[i].m_csIP, selipinfo[i].m_lServerID);
			myoutput[i].StartNet(&selipinfo[i]);

			if (g_bShareSound && (myoutput[i].m_iPlayhandle >= 0))
			{
				ClientParam.m_bPlaySound[i] = TRUE;
			}
		}
		Sleep(100);      
	}

	if (iSurveillanceNumber <= WINDOWNUM)
	{
		numberpos = iSurveillanceNumber;
	}
	else
	{
		numberpos = WINDOWNUM;
		
		if (ClientParam.m_bCyclePlay) //循环播放
		{
			if (cycletimer == 0)
			{
				cycletimer = SetTimer(CYCLE_TIMER,ClientParam.m_iCycleTime*1000,NULL);
			}
			ClientParam.m_bCycling = TRUE;
			m_bChangePage = TRUE;
			ClientParam.m_bPaused = FALSE;
		}
		else
		{
			ClientParam.m_bNextPage = TRUE;
			ClientParam.m_bFrontPage = FALSE;
		}
	}
//	m_windownum.EnableWindow(FALSE);
	GetDlgItem(IDC_PLAY)->SetWindowText("停止");
	UpdateData(FALSE);
} 

void CNewclientDlg::F_FullScreen()
{
	GetWindowPlacement(&m_OldWndPlacement);
	
	CRect WindowRect, ClientRect, FullScreenRect;
	int FullWidth, FullHeight;
	GetWindowRect(&WindowRect);
	RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);
	ClientToScreen(&ClientRect);
	//获取屏幕的分辨率;
	FullWidth = GetSystemMetrics(SM_CXSCREEN);
	FullHeight = GetSystemMetrics(SM_CYSCREEN);
	//将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客户区位置间的差值, 就得到全屏显示的窗口位置;
	FullScreenRect.left = WindowRect.left-ClientRect.left;
	FullScreenRect.top = WindowRect.top-ClientRect.top;
	FullScreenRect.right = WindowRect.right-ClientRect.right FullWidth;
	FullScreenRect.bottom = WindowRect.bottom-ClientRect.bottom FullHeight;
	//进入全屏显示状态 ;
	WINDOWPLACEMENT wndpl;
	wndpl.length = sizeof(WINDOWPLACEMENT);
	wndpl.flags = 0;
	wndpl.showCmd = SW_SHOWNORMAL;
	wndpl.rcNormalPosition = FullScreenRect;
	SetWindowPlacement(&wndpl);
	
	for (int i = 0; i < WINDOWNUM; i  )
		myoutput[i].ShowWindow(SW_HIDE);
	F_ShowHide(FALSE);
	mycurwin.ShowWindow(SW_HIDE);
	i = iActiveWndNumber;
	if (ClientParam.m_bUseCard)
	{
		NET_DVR_DISPLAY_PARA	displaypara;
		displaypara.bToVideoOut = 1;
		displaypara.bToScreen = 1;
		displaypara.nLeft = 0;
		displaypara.nTop = 0;
		displaypara.nWidth = 1024;
		displaypara.nHeight = 768;
		NET_DVR_ResetPara_Card(myoutput[i].m_iPlayhandle,&displaypara);
	}
}

void CNewclientDlg::F_EndFullScreen()
{
	SetWindowPlacement(&m_OldWndPlacement);
	F_ShowHide(TRUE);
	mycurwin.ShowWindow(SW_SHOW);
}

void CNewclientDlg::F_ShowHide(BOOL bShow)
{
	if (bShow)
	{
		//云台
		GetDlgItem(IDC_BUTTONUP)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONLEFT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONRIGHT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONDOWN)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONTJLEFT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONTJRIGHT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONJJLEFT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONJJRIGHT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONGQLEFT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONGQRIGHT)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_YZD)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTONYZW)->ShowWindow(SW_SHOW);
		//预览
		GetDlgItem(IDC_PLAY)->ShowWindow(SW_SHOW);
		//系统设置
		GetDlgItem(IDC_SYSTEMCFG)->ShowWindow(SW_SHOW);
		//抓图
		GetDlgItem(IDC_GETPICTURE)->ShowWindow(SW_SHOW);
		//录像
		GetDlgItem(IDC_RECORD)->ShowWindow(SW_SHOW);
	
		//时间日志
		GetDlgItem(IDC_EVENTLIST)->ShowWindow(SW_SHOW);

		//布防,撤防
		GetDlgItem(IDC_BUTTONALARMSET)->ShowWindow(SW_SHOW);
		//语音对讲
		GetDlgItem(IDC_AUDIOEXCHANGE)->ShowWindow(SW_SHOW);
		//回放
		GetDlgItem(IDC_VIDEOFILEPLAY)->ShowWindow(SW_SHOW);
		//亮度
		GetDlgItem(IDC_SLIDERLD)->ShowWindow(SW_SHOW);
		//对比度
		GetDlgItem(IDC_SLIDERDBD)->ShowWindow(SW_SHOW);
		//饱和度
		GetDlgItem(IDC_SLIDERBHD)->ShowWindow(SW_SHOW);
		//色度
		GetDlgItem(IDC_SLIDERSD)->ShowWindow(SW_SHOW);
		//音量
		GetDlgItem(IDC_SLIDERYL)->ShowWindow(SW_SHOW);
		//恢复默认值
		GetDlgItem(IDC_BUTTONPOLL)->ShowWindow(SW_SHOW);
		//退出系统
		GetDlgItem(IDC_EXIT)->ShowWindow(SW_SHOW);
		//窗口画面数
		GetDlgItem(IDC_COMBOWNDNUM)->ShowWindow(SW_SHOW);

		GetDlgItem(IDC_LED1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED3)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED4)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED5)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED6)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED7)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED8)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED9)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED10)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED11)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED12)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED13)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED14)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED15)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_LED16)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED3)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED4)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED5)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED6)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED7)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED8)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED9)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED10)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED11)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED12)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED13)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED14)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED15)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_ALARMLED16)->ShowWindow(SW_SHOW);
		//2006-01-11
		GetDlgItem(IDC_STATIC0)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC8)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC9)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC11)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC12)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC13)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC14)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC15)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC16)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC17)->ShowWindow(SW_SHOW);
	}
	else
	{
		//云台
		GetDlgItem(IDC_BUTTONUP)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONLEFT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONRIGHT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONDOWN)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONTJLEFT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONTJRIGHT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONJJLEFT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONJJRIGHT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONGQLEFT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONGQRIGHT)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_YZD)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTONYZW)->ShowWindow(SW_HIDE);
		
		//预览
		GetDlgItem(IDC_PLAY)->ShowWindow(SW_HIDE);
		//系统设置
		GetDlgItem(IDC_SYSTEMCFG)->ShowWindow(SW_HIDE);
		//抓图
		GetDlgItem(IDC_GETPICTURE)->ShowWindow(SW_HIDE);
		//录像
		GetDlgItem(IDC_RECORD)->ShowWindow(SW_HIDE);

		//时间日志
		GetDlgItem(IDC_EVENTLIST)->ShowWindow(SW_HIDE);

		//布防,撤防
		GetDlgItem(IDC_BUTTONALARMSET)->ShowWindow(SW_HIDE);
		//语音对讲
		GetDlgItem(IDC_AUDIOEXCHANGE)->ShowWindow(SW_HIDE);
		//回放
		GetDlgItem(IDC_VIDEOFILEPLAY)->ShowWindow(SW_HIDE);
		//亮度
		GetDlgItem(IDC_SLIDERLD)->ShowWindow(SW_HIDE);
		//对比度
		GetDlgItem(IDC_SLIDERDBD)->ShowWindow(SW_HIDE);
		//饱和度
		GetDlgItem(IDC_SLIDERBHD)->ShowWindow(SW_HIDE);
		//色度
		GetDlgItem(IDC_SLIDERSD)->ShowWindow(SW_HIDE);
		//音量
		GetDlgItem(IDC_SLIDERYL)->ShowWindow(SW_HIDE);
		//恢复默认值
		GetDlgItem(IDC_BUTTONPOLL)->ShowWindow(SW_HIDE);
		//退出系统
		GetDlgItem(IDC_EXIT)->ShowWindow(SW_HIDE);
		//窗口画面数
		GetDlgItem(IDC_COMBOWNDNUM)->ShowWindow(SW_HIDE);	

		GetDlgItem(IDC_LED1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED8)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED9)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED10)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED11)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED12)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED13)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED14)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED15)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_LED16)->ShowWindow(SW_HIDE);

		GetDlgItem(IDC_ALARMLED1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED8)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED9)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED10)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED11)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED12)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED13)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED14)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED15)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_ALARMLED16)->ShowWindow(SW_HIDE);
		//2006-01-11
		GetDlgItem(IDC_STATIC0)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC11)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC12)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC13)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC14)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC15)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC16)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC17)->ShowWindow(SW_HIDE);
	}
}

void CNewclientDlg::F_ShowVideoParams()
{
	m_ld.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness);
	m_sd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue);
	m_bhd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation);
	m_dbd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast);
	m_yl.SetPos(ClientParam.m_Volume);
}

void CNewclientDlg::F_NextPage()
{
	int itemp,i;

	itemp = numberpos % WINDOWNUM;
	if ((itemp > 0) || (numberpos == iSurveillanceNumber))//只有当numberpos是WINDOWNUM的整数倍时才有可能按next
		return;

	for (i = 0; i < MAXVIEWNUM; i  )
	{
		if ( (myoutput[i].m_iPlayhandle >= 0) || (myoutput[i].m_bFileSave) )
			F_StopClientRecord(i);
	}
	if ( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) )
	{
		ArrayWindow(0, WINDOWNUM);	//窗口放大状态时,循环到下一画面,恢复原窗口数;					
		MoveCurWin(WINDOWNUM,0);
		ClientParam.m_bEnlarged = FALSE;
		ClientParam.m_bFullScreen = FALSE;
	}

	itemp = iSurveillanceNumber - numberpos;
	if (itemp > WINDOWNUM)
		itemp = WINDOWNUM;
	if (!ClientParam.m_bUseCard)
	{
		if (!g_bShareSound)
			NET_DVR_CloseSound();
	}
	for (i=0;i<WINDOWNUM;i  )
	{
		if (g_bShareSound)
			NET_DVR_CloseSoundShare(myoutput[i].m_iPlayhandle);
		myoutput[i].StopNet();
	}

	for (i=0;i<itemp;i  )
	{
		if (i numberpos < MAXNUMBER)
		{
			myoutput[i].m_lIndex = i;
			if (ClientParam.m_bUseCard)
				myoutput[i].StartCard(&selipinfo[i numberpos]);
			else
			{
				myoutput[i].StartNet(&selipinfo[i numberpos]);
				if (g_bShareSound && (myoutput[i].m_iPlayhandle >= 0))
				{
					ClientParam.m_bPlaySound[i] = TRUE;
				}
			}
			Sleep(100);
		}
	}

	itemp = iSurveillanceNumber - numberpos;
	if (itemp <= WINDOWNUM)
	{
		numberpos = iSurveillanceNumber;
		ClientParam.m_bNextPage = FALSE;
	}
	else
	{
		numberpos  = WINDOWNUM;
	}
	
	ClientParam.m_bFrontPage = TRUE;
	UpdateData(FALSE);
}

void CNewclientDlg::F_FrontPage()
{
	int itemp,i;

	if (numberpos <= WINDOWNUM)
		return;

	for (i = 0; i < MAXVIEWNUM; i  )
	{
		if ( (myoutput[i].m_iPlayhandle >= 0) || (myoutput[i].m_bFileSave) )
			F_StopClientRecord(i);
	}
	if ( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) )
	{
		ArrayWindow(0, WINDOWNUM);	//窗口放大状态时,循环到下一画面,恢复原窗口数;					
		MoveCurWin(WINDOWNUM,0);
		ClientParam.m_bEnlarged = FALSE;
		ClientParam.m_bFullScreen = FALSE;
	}

	if (numberpos > WINDOWNUM)
	{
		if (numberpos < 2*WINDOWNUM)
		{
			itemp = 0;
		}
		else
		{
			i = numberpos % WINDOWNUM;
			if (i == 0)
				itemp = numberpos - 2*WINDOWNUM ;
			else
				itemp = numberpos - WINDOWNUM -i;

		}
		if (!ClientParam.m_bUseCard)
		{
			if (!g_bShareSound)
				NET_DVR_CloseSound();
		}
//itemp:确定上一页要播放监控点的起始编号;
		for (i=0;i<WINDOWNUM;i  )
		{
			if (g_bShareSound)
				NET_DVR_CloseSoundShare(myoutput[i].m_iPlayhandle);
			myoutput[i].StopNet();
		}

		for (i=0;i<WINDOWNUM;i  )
		{
			if (itemp i < MAXNUMBER)
			{
				myoutput[i].m_lIndex = i;
				if (ClientParam.m_bUseCard)
					myoutput[i].StartCard(&selipinfo[i itemp]);
				else
				{
					myoutput[i].StartNet(&selipinfo[i itemp]);
					if (g_bShareSound && (myoutput[i].m_iPlayhandle >= 0))
					{
						ClientParam.m_bPlaySound[i] = TRUE;
					}
				}
				Sleep(100);
			}
		}

		if (numberpos <= 2*WINDOWNUM)
		{
			numberpos = WINDOWNUM;
			ClientParam.m_bFrontPage = FALSE;		//没有上一页
		}
		else
		{
			i = numberpos % WINDOWNUM;
			if (i == 0)
				numberpos -= WINDOWNUM;
			else
				numberpos -= i;
		}
	}
	
	ClientParam.m_bNextPage = TRUE;
	UpdateData(FALSE);
}

void CNewclientDlg::F_CyclePause()
{
	if (!ClientParam.m_bPaused)
	{	
		ClientParam.m_bPaused = TRUE;
		if (cycletimer)
		{
			KillTimer(CYCLE_TIMER);
			cycletimer = 0;
		}
	}
	else
	{
		m_bChangePage = TRUE;
		F_CyclePlay();
		if (cycletimer == 0)
			cycletimer = SetTimer(CYCLE_TIMER,ClientParam.m_iCycleTime*1000,NULL);
		ClientParam.m_bPaused = FALSE;
	}
}

void CNewclientDlg::F_CyclePlay()
{
	int itemp,i,j;
	TRACE("F_CyclePlay");
	if (iSurveillanceNumber <= WINDOWNUM)
		return;	
	m_bChangePage = FALSE; 
	
	if ( (ClientParam.m_bEnlarged) || (ClientParam.m_bFullScreen) )
	{
		if (ClientParam.m_bFullScreen) 
		{
			F_EndFullScreen();
		}		
		ArrayWindow(0, WINDOWNUM);	//窗口放大状态时,循环到下一画面,恢复原窗口数;					
		MoveCurWin(WINDOWNUM,0);
		ClientParam.m_bEnlarged = FALSE;
		ClientParam.m_bFullScreen = FALSE;
	}
	if (iSurveillanceNumber == numberpos)		//循环已到了最后一页,又开始第一页;
		itemp = WINDOWNUM;
	else
	{
		itemp = iSurveillanceNumber - numberpos;
		
		if (itemp > WINDOWNUM)
			itemp = WINDOWNUM;
	}
	
	if (iSurveillanceNumber == numberpos)
		j = 0;
	else
		j = numberpos;
	
	if (!ClientParam.m_bUseCard)
	{
		if (!g_bShareSound)
			NET_DVR_CloseSound();
	}
	//如果一个循环结束,可能不是从9->9,或许是9->i,所以需要对对(9-i)做ClientStop
	//循环到最后一个画面,要播放的窗口数可能小于WINDOWNUM,所以在播放最后一个画面时,关闭多余的播放窗口;
	for (i=0;i<WINDOWNUM;i  )
	{
//		TRACE("cycle stopplay %d", myoutput[i].m_iPlayhandle);
		if (g_bShareSound)
			NET_DVR_CloseSoundShare(myoutput[i].m_iPlayhandle);
		myoutput[i].StopNet();
//		TRACE("StopNet");
	}
	
	for (i=0;i<itemp;i  )
	{
		if (i j < MAXNUMBER)
		{	
//			TRACE("play sel = %d", i j);
			myoutput[i].m_lIndex = i;
			if (ClientParam.m_bUseCard)
				myoutput[i].StartCard(&selipinfo[i j]);
			else
			{
				myoutput[i].StartNet(&selipinfo[i j]);
				if (g_bShareSound && (myoutput[i].m_iPlayhandle >= 0))
				{
					ClientParam.m_bPlaySound[i] = TRUE;
				}
			}
			Sleep(100);
//			TRACE("cycle startplay %d", myoutput[i].m_iPlayhandle);
		}
	}
	
	//	MyInvalidate();
	itemp = iSurveillanceNumber - numberpos;
	if (itemp ==0)
	{
		numberpos = WINDOWNUM;
	}
	else if (itemp <= WINDOWNUM)
	{
		numberpos = iSurveillanceNumber;
	}	
	else
	{
		numberpos  = WINDOWNUM;
	}
	
	m_bChangePage = TRUE;
	
	UpdateData(FALSE);
}

void CNewclientDlg::OnGetpicture() 
{
	// TODO: Add your control notification handler code here
	int i;
	char cFilename[256];
	CString sTemp;
	
	i = iActiveWndNumber;
	CTime time = CTime::GetCurrentTime();
	if (myoutput[i].m_iPlayhandle >= 0)
	{
		sTemp.Format("%s\\", ClientParam.m_csPictureSavePath);		
		if (GetFileAttributes(sTemp) != FILE_ATTRIBUTE_DIRECTORY)
		{
			CreateDirectory(sTemp, NULL);
		}
		sprintf(cFilename, "%s\\Picture_%s_%02d_%4d%02d%02d_%02d%02d%02d_%d.bmp", ClientParam.m_csPictureSavePath, myoutput[i].m_csIP, myoutput[i].m_iChannel,	\
			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), GetTickCount());
		TRACE("Picture save file name : %s", cFilename);
		if (ClientParam.m_bUseCard)
		{
			//2005-12-08 add
			if(NET_DVR_CapturePicture_Card(myoutput[i].m_iPlayhandle, cFilename))
			{
				CString sTemp;	
				sTemp.Format("Capture picture succeed %s!",cFilename);
				AfxMessageBox(sTemp);
				return;
			}
			else
			{
				AfxMessageBox("Failed to capture picture!");
			}
		}
		else
		{
			if (NET_DVR_CapturePicture(myoutput[i].m_iPlayhandle, cFilename))
			{
				CString sTemp;	
				sTemp.Format("抓图成功 %s!",cFilename);
				AfxMessageBox(sTemp);
				return;
			}
			else
			{
				AfxMessageBox("抓图失败!");
			}
		}
	}
}

void CNewclientDlg::OnRecord() 
{
	// TODO: Add your control notification handler code here
	int i;
	
	if (ClientParam.m_bAutoRecord)
		return;
	i = iActiveWndNumber;
	if ( (myoutput[i].m_iPlayhandle >= 0) && (!myoutput[i].m_bFileSave) )
	{
		//AfxMessageBox("111");
		if (F_MakeDir())
			F_StartClientRecord(i);	
	}
	else if (myoutput[i].m_bFileSave)
		F_StopClientRecord(i);
}

BOOL CNewclientDlg::F_MakeDir()
{
	CString sTemp;
	DWORD dirattr;
	CTime time;
	
	time = CTime::GetCurrentTime();
	sTemp.Format("%c:\\mpeg4record\\", m_cCurrentRecordDriver);
	dirattr = GetFileAttributes(sTemp);
	if (dirattr == FILE_ATTRIBUTE_DIRECTORY)
	{
		sTemp.Format("%c:\\mpeg4record\\%4d-%02d-%02d\\", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay());
		dirattr=GetFileAttributes(sTemp);
		if (dirattr == FILE_ATTRIBUTE_DIRECTORY)
		{
			ClientParam.m_csClientRecordPath.Format("%s",sTemp);
			TRACE("已经创建了目录%s", sTemp);
			return TRUE;
		}
		else
		{
			if (!CreateDirectory(sTemp, NULL))
			{
				AfxMessageBox("创建年月日目录失败!");
				return FALSE;
			}
			else
			{
				ClientParam.m_csClientRecordPath.Format("%s",sTemp);
				TRACE("在已有的目录%c:\\mpeg4record下创建子目录%4d-%02d-%02d", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay());
				return TRUE;
			}
		}	
	}
	if (!CreateDirectory(sTemp, NULL))
	{
		TRACE("创建mpeg4record目录失败!");
		return FALSE;
	}
	sTemp.Format("%c:\\mpeg4record\\%4d-%02d-%02d\\",m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay());
	if (!CreateDirectory(sTemp, NULL))
	{
		return FALSE;
	}
	ClientParam.m_csClientRecordPath.Format("%s",sTemp);
	TRACE("先创建%c:\\mpeg4record目录,再创建子目录%4d-%02d-%02d", m_cCurrentRecordDriver, time.GetYear(), time.GetMonth(), time.GetDay());
	return TRUE;
}

void CNewclientDlg::F_StartClientRecord(int iRecordWndIndex)
{
	int i;
	char cFilename[256];
	
	i = iRecordWndIndex;
	TRACE("Start myoutput[%d] Client Record", i);
	CTime time = CTime::GetCurrentTime();
	sprintf(cFilename, "%s%s_%02d_%4d%02d%02d_%02d%02d%02d.mp4", ClientParam.m_csClientRecordPath, myoutput[i].m_csIP, myoutput[i].m_iChannel,		\
		time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond() );
	if (!NET_DVR_SaveRealData(myoutput[i].m_iPlayhandle, cFilename))
	{
		AfxMessageBox("录像失败!");
		return;
	}
	TRACE("Client Record Filename = %s", cFilename);
	myoutput[i].m_lChangeFileNameTime = time.GetTime()   ClientParam.m_iRecordFileInterval * 60;
	myoutput[i].m_bFileSave = TRUE;
	m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND);	
}

void CNewclientDlg::F_StopClientRecord(int iRecordWndIndex)
{
	int i;
	
	i = iRecordWndIndex;
	TRACE("Stop myoutput[%d] Client Record", i);
	NET_DVR_StopSaveRealData(myoutput[i].m_iPlayhandle);
	myoutput[i].m_bFileSave = FALSE;
	m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
}
/*
void CNewclientDlg::OnHide() 
{
	// TODO: Add your control notification handler code here
	ShowWindow(SW_MINIMIZE);
}
*/

void CNewclientDlg::OnEventlist() 
{
	// TODO: Add your control notification handler code here
	int i;
	CEventLog	EventLogDlg;
	EventLogDlg.DoModal();
	SetEvent(hVideoBeeper);	
	for (i = 0; i < MAXVIEWNUM; i  )
	{
		if (ClientParam.m_iAlarmHandle[i] >= 0)
		{
			m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_ON,CLed::LED_ROUND);
		}
		else
			m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
	}
	for (i = 0; i < MAXALARMIN; i  )
	{
		alarminfo[i].m_csIP.Format(_T(""));
		alarminfo[i].m_csUsername.Format(_T(""));
		alarminfo[i].m_csPassword.Format(_T(""));
		alarminfo[i].m_iChannel = -1;
		alarminfo[i].m_iAlarmLevel = -1;
		alarminfo[i].m_iAlarmType = -1;
		alarminfo[i].m_iPortIndex = -1;
		alarminfo[i].m_wServerPort = 8000;
	}
	m_iAlarmNumber = 0;
}

void CNewclientDlg::OnButtonalarmset() 
{
	// TODO: Add your control notification handler code here
	int i;
	
	CSetAlarm	SetAlarmDlg;
	SetAlarmDlg.DoModal();
	if (SetAlarmDlg.m_bOK)
	{
		for (i = 0; i < MAXVIEWNUM; i  )
		{
			if (ClientParam.m_iAlarmHandle[i] >= 0)
			{
				m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_GREEN,CLed::LED_ON,CLed::LED_ROUND);
			}
			else
			{
				m_pAlarmLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
			}
		}
	}
}

void CNewclientDlg::OnVideofileplay() 
{
	// TODO: Add your control notification handler code here
	CPlayBack	PlayBackDlg;
	PlayBackDlg.DoModal();
}

BOOL CNewclientDlg::F_JudgeDiskFull()
{
	int i;
	ULARGE_INTEGER FreeSpace,CallerSpace,TotalSpace;
	CString csRootPath;	
	
	for (i = ClientParam.m_iStartRecordDriver; i < ClientParam.m_iEndRecordDriver   1; i  )
	{	
		csRootPath.Format("%c%s",m_cHardDriver[i],":\\");	//从录像起始驱动器开始	
		GetDiskFreeSpaceEx(csRootPath,&CallerSpace,&TotalSpace,&FreeSpace);
		if (CallerSpace.QuadPart > MINSPACE)
		{
			m_cCurrentRecordDriver = m_cHardDriver[i];
//			TRACE("m_cCurrentRecordDriver = %c:\\", m_cCurrentRecordDriver);
			ClientParam.m_bAllDiskFull = FALSE;
			return	TRUE;
		}
	}
	ClientParam.m_bAllDiskFull = TRUE;
	return FALSE;
}

void CNewclientDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
//	time_t	lCurrentTime;
	CString	csRootPath;
	CString csTemp;
	int i,j;
	CTime time1 = CTime::GetCurrentTime();
	int iWeekday = time1.GetDayOfWeek() - 1;
	WORD	iNowTime = time1.GetHour() * 100   time1.GetMinute();
	NET_DVR_TIME CurTime;
	CurTime.dwYear = time1.GetYear();
	CurTime.dwMonth = time1.GetMonth();
	CurTime.dwDay = time1.GetDay();
	CurTime.dwHour = time1.GetHour();
	CurTime.dwMinute = time1.GetMinute();
	CurTime.dwSecond = time1.GetSecond();
	i = j = 0;
	switch (nIDEvent)
	{
	case CYCLE_TIMER:
		if (m_bChangePage)
			F_CyclePlay();
		break;
	case FREESPACE_TIMER:
		csRootPath.Format("%c:\\", m_cCurrentRecordDriver);	
		ULARGE_INTEGER FreeSpace,CallerSpace,TotalSpace;
		GetDiskFreeSpaceEx(csRootPath,&CallerSpace,&TotalSpace,&FreeSpace);
		ClientParam.m_bAllDiskFull = FALSE;
		if (CallerSpace.QuadPart < MINSPACE)
		{
			csTemp.Format("%4d-%02d-%02d %02d:%02d:%02d 硬盘驱动器%c已满", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond, m_cCurrentRecordDriver);
			TRACE(csTemp);
			//AfxMessageBox(csTemp);
			if (!F_JudgeDiskFull())		//所有硬盘都满,删除8个最早的录像文件
			{
				if (ClientParam.m_bCycleRecord)
					F_DeleteClientRecordFile();
				else
				{
					for (i = 0; i < MAXVIEWNUM; i  )
					{
						if ( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) )
							F_StopClientRecord(i);
					}
					AfxMessageBox("客户端录像硬盘驱动器已满,无法继续录像!");
					return;
				}
			}
			else
			{	//其他分区还有空间,存放到其他分区
				//AfxMessageBox("222");
				if (F_MakeDir())
				{
					TRACE("客户端录像文件存放到%c分区", m_cCurrentRecordDriver);
					for (i = 0; i < MAXVIEWNUM; i  )
					{
						if ( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) )
							F_ChangeRecordFileName(i);
					}
				}
			}
		}
		break;
	case FILEINTERVAL_TIMER:
#if 0
		char csServerIP[16];
		char cUserName[100];
		char cPassword[100];
		LONG lUserID;
		NET_DVR_COMPRESSIONCFG m_compressioncfg;
		NET_DVR_RECORD	m_record;
		NET_DVR_PICCFG	m_piccfg;
		NET_DVR_DEVICEINFO DeviceInfo;
		strcpy(csServerIP, serverinfo[i].m_csServerIP);
		strncpy(cUserName, serverinfo[i].m_csServerAdminName, MAX_NAMELEN);
		strncpy(cPassword, serverinfo[i].m_csServerAdminPasswd, PASSWD_LEN);
		lUserID = NET_DVR_Login(csServerIP, serverinfo[i].m_wServerPort, cUserName, cPassword, &DeviceInfo);
		if (lUserID < 0)
		{
			CString sTemp;	
			int nErr = NET_DVR_GetLastError();  
			if (nErr == NET_DVR_PASSWORD_ERROR)
			{
				sTemp.Format("!!!!!!!!!!%s 用户名密码错误! ", csServerIP);
				TRACE(sTemp);
				//AfxMessageBox(sTemp);
			}
			else
			{
				sTemp.Format("!!!!!!!!!!%s 由于网络原因或DVR忙, 注册失败, nErr[%d]! ", csServerIP, nErr);
				TRACE(sTemp);
				//AfxMessageBox(sTemp);
			}
		}
		DWORD dwReturned;	
		if (!NET_DVR_GetDVRConfig(serverinfo[i].m_lServerID, NET_DVR_GET_PICCFG, 1,&m_piccfg, sizeof(NET_DVR_PICCFG), &dwReturned))
		{
			CString sTemp;
			sTemp.Format("%d : NET_DVR_GET_PICCFG = %d \n", 1, NET_DVR_GetLastError());
			TRACE(sTemp);
		}
		if (!NET_DVR_GetDVRConfig(serverinfo[i].m_lServerID,NET_DVR_GET_COMPRESSCFG, 1,&m_compressioncfg, sizeof(NET_DVR_COMPRESSIONCFG), &dwReturned))
		{
			CString sTemp;
			sTemp.Format("%d : ERROR: NET_DVR_GET_COMPRESSCFG = %d \n", 1, NET_DVR_GetLastError());
			TRACE(sTemp); 
		}
		if (!NET_DVR_GetDVRConfig(serverinfo[i].m_lServerID,NET_DVR_GET_RECORDCFG, 1,&m_record, sizeof(NET_DVR_RECORD), &dwReturned))	
		{
			CString sTemp;
			sTemp.Format("%d : ERROR: NET_DVR_GET_RECORDCFG = %d \n", 1, NET_DVR_GetLastError());
			TRACE(sTemp);	
		}
		
		if (lUserID >= 0)   
		{
			if(!NET_DVR_Logout(lUserID))
				TRACE("%s[ID: %d] 注销失败! ", csServerIP, lUserID);
		}
#endif
		//////////////////////
/*		NET_DVR_ALARMOUTSTATUS AlarmOutState;
		if (NET_DVR_GetAlarmOut(serverinfo[0].m_lServerID,&AlarmOutState))
		{
			TRACE("AlarmOut [%d][%d][%d][%d]", AlarmOutState.Output[0], AlarmOutState.Output[1], AlarmOutState.Output[2], AlarmOutState.Output[3]);
			if (AlarmOutState.Output[0] == 0)
				;
				//NET_DVR_SetAlarmOut(serverinfo[0].m_lServerID, 0, 1);
		}
	*/	
		//////////////////////
		for (i = 0; i < MAXVIEWNUM; i  )
		{
			if ( (myoutput[i].m_iPlayhandle >= 0) && (myoutput[i].m_bFileSave) )
			{
				if (time1.GetTime() - myoutput[i].m_lChangeFileNameTime >= 0)
				{
					TRACE("更改客户端录象文件名时间到");
					if (F_MakeDir())
						F_ChangeRecordFileName(i);
				}
			}
		}
		break;	
	case AUTORECORD_TIMER:
		if (ClientParam.m_bCycling)
			return;	//循环播放客户端不允许录像
		if (!ClientParam.m_bAutoRecord)
			return;
		
		for (i = 0; i < 4; i  )
		{
			if ( (iNowTime >= ClientParam.m_ClientRecordTime[iWeekday][i].m_iStartTime) && 
				(iNowTime < ClientParam.m_ClientRecordTime[iWeekday][i].m_iStopTime) )
			{	//自动录像时间到
				for (j = 0; j < MAXVIEWNUM; j  )
				{
					if (myoutput[j].m_iPlayhandle >= 0)
					{
						if (!myoutput[j].m_bFileSave)
						{
							if (ClientParam.m_bAllDiskFull)
							{
								TRACE("自动录像时间到,但硬盘满暂不录像");
								return;		//如果客户端硬盘满就不录像
							}
							//AfxMessageBox("444");
							if (F_MakeDir())
							{
								TRACE("%02d:%02d	myoutput[%d]开始自动录像", CurTime.dwHour, CurTime.dwMinute, j);
								F_StartClientRecord(j);
							}
						}
					}
				}
				break;
			}
			else
				i  ;
		}
		if (i == 4)
		{
			for (j = 0; j < MAXVIEWNUM; j  )
			{
				if (myoutput[j].m_bFileSave)
				{
					TRACE("%02d:%02d	停止自动录像的时间到,停止myoutput[%d]自动录像", CurTime.dwHour, CurTime.dwMinute, j);
					F_StopClientRecord(j);
				}
			}
		}
		break;
	case CHECKSERVER_TIMER:
		if (ClientParam.m_iCheckServerTime == (LONG)(CurTime.dwHour*10000   CurTime.dwMinute*100   CurTime.dwSecond) )
		{
			for (i = 0; i < MAXIPNUMBER; i  )
			{
				if (serverinfo[i].m_csServerName != "")
				{
					if (NET_DVR_SetDVRConfig(serverinfo[i].m_lServerID, NET_DVR_SET_TIMECFG,0,&CurTime, sizeof(NET_DVR_TIME)))
					{
						TRACE("%4d年%02d月%02d日%02d时%02d分%02d秒进行硬盘录像机校时成功.", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond);						
					}
					else
					{
						TRACE("%4d年%02d月%02d日%02d时%02d分%02d秒进行硬盘录像机校时失败.", CurTime.dwYear, CurTime.dwMonth, CurTime.dwDay, CurTime.dwHour, CurTime.dwMinute, CurTime.dwSecond);						
					}
				}
			}
		}
		break;
	default:
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

void CNewclientDlg::F_DeleteClientRecordFile()
{
	CFileFind fdfile,fdfilemp4;
	BOOL bFinded,bfilefind;
	CString sDeleteDir,sTempDelete;
	CString sDir;
	CString sDate;
	CString sFileName;
	CTime time,temptime;
	
	int i,deletenum = 0;
	sDeleteDir.Format("0000-00-00");
	sTempDelete.Format("3000-00-00");

	time=CTime::GetCurrentTime();
	
	for (i = ClientParam.m_iStartRecordDriver; i < (ClientParam.m_iEndRecordDriver   1); i  )
	{
		sDir.Format("%c:\\mpeg4record\\*.*",m_cHardDriver[i]);
		bFinded=fdfile.FindFile(sDir);
		while (bFinded)
		{
			bFinded=fdfile.FindNextFile();
			if (fdfile.IsDots())
			{
				continue;
			}
			if (fdfile.IsDirectory())
			{
				if (fdfile.GetFileName()==_T("download"))
				{
					continue;
				}
				if (fdfile.GetFileName()==_T("alarm"))
				{
					continue;
				}
				sFileName.Format("%c:\\mpeg4record\\%s\\*.mp4",m_cHardDriver[i],fdfile.GetFileName());
				bfilefind=fdfilemp4.FindFile(sFileName);
				if (!bfilefind)
				{
					RemoveDirectory(fdfile.GetFilePath());
					TRACE("删除目录:%s",fdfile.GetFilePath());
				}
				while (bfilefind)
				{
					bfilefind=fdfilemp4.FindNextFile();
					if (fdfile.IsDots())
					{
						continue;
					}
					fdfilemp4.GetCreationTime(temptime);
					if (temptime<time)
					{
						time=temptime;
						sTempDelete.Format("%s",fdfilemp4.GetFilePath());
					}
				}
			}			
		}
	}
	sFileName.Format("%s",sTempDelete);
	if (!DeleteFile(sFileName))
	{
		sTempDelete.Format("删除文件%s失败",sFileName);
		F_AddEvent(sTempDelete);
		for (i = 0; i < MAXVIEWNUM; i  )
		{
			if ( (myoutput[i].m_iPlayhandle >= 0) || (myoutput[i].m_bFileSave) )
				F_StopClientRecord(i);
		}
		AfxMessageBox("硬盘容量不足,自动删除文件失败,请清理硬盘后重新开始录像!");
	}
	else
	{
		sTempDelete.Format("删除文件%s成功",sFileName);
		TRACE("删除文件%s",sFileName);
		deletenum  ;
	}
}

void CNewclientDlg::F_ChangeRecordFileName(int iRecordWndIndex)
{
	int i;
	char cFilename[256];
	CTime time = CTime::GetCurrentTime();
	
	i = iRecordWndIndex;
	
	if (myoutput[i].m_bFileSave)
	{
		TRACE("停止myoutput[%d]客户端录像,更换文件名", i);
		NET_DVR_StopSaveRealData(myoutput[i].m_iPlayhandle);
	}
	if (myoutput[i].m_iPlayhandle >= 0)
	{
		sprintf(cFilename, "%s%s_%02d_%4d%02d%02d_%02d%02d%02d.mp4", ClientParam.m_csClientRecordPath, myoutput[i].m_csIP, myoutput[i].m_iChannel,		\
			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond() );
		if (!NET_DVR_SaveRealData(myoutput[i].m_iPlayhandle, cFilename))
		{
			AfxMessageBox("录像失败!");
			m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_DISABLED,CLed::LED_ROUND);
			return;
		}
		myoutput[i].m_lChangeFileNameTime = time.GetTime()   ClientParam.m_iRecordFileInterval * 60;
		TRACE("Client Record Filename = %s", cFilename);
		myoutput[i].m_bFileSave = TRUE;
		m_pCapLed[i]->SetLed(CLed::LED_COLOR_RED,CLed::LED_ON,CLed::LED_ROUND);
	}
}

void CNewclientDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	int i;
	WORD	wTemp;
	WORD	wVolumevalue;
	BOOL	bRet;
	
	i = iActiveWndNumber;
	wTemp = (0xFFFF) / 100;
	bRet = FALSE;
	if (myoutput[i].m_iPlayhandle >= 0)
	{
		if (GetDlgItem(IDC_SLIDERLD) == pScrollBar)
		{
			ClientParam.m_VideoInfo[i].m_iBrightness = m_ld.GetPos();
			bRet = TRUE;
		}
		else if (GetDlgItem(IDC_SLIDERDBD) == pScrollBar)
		{
			ClientParam.m_VideoInfo[i].m_iContrast = m_dbd.GetPos();
			bRet = TRUE;
		}
		else if (GetDlgItem(IDC_SLIDERBHD) == pScrollBar)
		{
			ClientParam.m_VideoInfo[i].m_iSaturation = m_bhd.GetPos();
			bRet = TRUE;
		}
		else if (GetDlgItem(IDC_SLIDERSD) == pScrollBar)
		{
			ClientParam.m_VideoInfo[i].m_iHue= m_sd.GetPos();
			bRet = TRUE;
		}
		else if (GetDlgItem(IDC_SLIDERYL) == pScrollBar)
		{
			if (ClientParam.m_bPlaySound[i])
			{
				TRACE("调整音频浏览声音.");
				ClientParam.m_Volume = m_yl.GetPos();
				wVolumevalue = (WORD)(m_yl.GetPos()) * wTemp;
				if (g_bShareSound)
				{
					NET_DVR_OpenSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle);
				}
				else
				{
					NET_DVR_OpenSound(myoutput[i].m_iPlayhandle);
				}
				NET_DVR_Volume(myoutput[i].m_iPlayhandle, wVolumevalue);
			}
		}	
		
		if (bRet)
		{
			bRet = NET_DVR_ClientSetVideoEffect(myoutput[i].m_iPlayhandle, ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, 
										 ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue);
			//bRet = NET_DVR_SetVideoEffect(myoutput[i].m_lServerID, myoutput[i].m_iChannel,ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, 
			//	ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue);
			if (!bRet)
			{
				AfxMessageBox("设置视频参数失败!");
			}
		}
	}
	if (GetDlgItem(IDC_SLIDERYL) == pScrollBar)
	{
		if (lVoiceIndex >= 0)
		{
			TRACE("调整语音对讲声音.");
			ClientParam.m_Volume = m_yl.GetPos();
			wVolumevalue = (WORD)(m_yl.GetPos()) * wTemp;
			NET_DVR_SetVoiceComClientVolume(lVoiceIndex, wVolumevalue);
		}
	}	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CNewclientDlg::OnButtonpoll() 
{
	// TODO: Add your control notification handler code here
	int i = iActiveWndNumber;
	WORD wTemp = (0xFFFF) / 100;
	WORD	wVolumevalue;

	ClientParam.m_VideoInfo[i].m_iBrightness = DEFAULTBRIGHTNESS;
	ClientParam.m_VideoInfo[i].m_iContrast = DEFAULTCONTRAST;
	ClientParam.m_VideoInfo[i].m_iSaturation = DEFAULTSATURATION;
	ClientParam.m_VideoInfo[i].m_iHue = DEFAULTHUE;
	NET_DVR_ClientSetVideoEffect(myoutput[i].m_iPlayhandle, ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, 
		ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue);
	//NET_DVR_SetVideoEffect(myoutput[i].m_lServerID, myoutput[i].m_iChannel,ClientParam.m_VideoInfo[i].m_iBrightness, ClientParam.m_VideoInfo[i].m_iContrast, 
	//	ClientParam.m_VideoInfo[i].m_iSaturation, ClientParam.m_VideoInfo[i].m_iHue);
	ClientParam.m_Volume = DEFAULTVOLUME;
	if (lVoiceIndex >= 0)
	{
		TRACE("调整语音对讲声音.");
		wVolumevalue = (WORD)(ClientParam.m_Volume) * 10 *wTemp;
		NET_DVR_SetVoiceComClientVolume(lVoiceIndex, wVolumevalue);
	}
	else if (ClientParam.m_bPlaySound)
	{
		TRACE("调整音频浏览声音.");
		wVolumevalue = (WORD)(ClientParam.m_Volume) * 10 * wTemp;
		if (g_bShareSound)
		{
			NET_DVR_OpenSoundShare(myoutput[iActiveWndNumber].m_iPlayhandle);
		}
		else
		{
			NET_DVR_OpenSound(myoutput[i].m_iPlayhandle);
		}
		NET_DVR_Volume(myoutput[i].m_iPlayhandle, wVolumevalue);
	}
	m_ld.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iBrightness);
	m_sd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iHue);
	m_bhd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iSaturation);
	m_dbd.SetPos(ClientParam.m_VideoInfo[iActiveWndNumber].m_iContrast);
	m_yl.SetPos(ClientParam.m_Volume);
}

void CNewclientDlg::OnButtonyzw() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int i = iActiveWndNumber;
	if (myoutput[i].m_iPlayhandle >= 0)
	{
		NET_DVR_PTZPreset(myoutput[i].m_iPlayhandle, GOTO_PRESET, m_yzd);
	}
}

void CNewclientDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
//	CDialog::OnCancel();
}

void CNewclientDlg::OnOK() 
{
	// TODO: Add extra cleanup here
	
	//	CDialog::OnOk();
}
/*
void CNewclientDlg::OnButauto() 
{
	// TODO: Add your control notification handler code here
	char buf[20];
	buf[0] = 0xa0;
	buf[1] = 0x00;
	buf[2] = 0x00;
	buf[3] = 0x07;
	buf[4] = 0x00;
	buf[5] = 0x63;
	buf[6] = 0xaf;
	buf[7] = 0x6b;

	NET_DVR_TransPTZ_Other(myoutput[0].m_lServerID, 1, buf, 8);
}
*/
/*
void CNewclientDlg::OnButsharesound() 
{
	// TODO: Add your control notification handler code here
	if (g_bShareSound)
	{
		NET_DVR_SetAudioMode(1);
		g_bShareSound = FALSE;
//		GetDlgItem(IDC_BUTSHARESOUND)->SetWindowText("sound");
	}
	else
	{
		NET_DVR_SetAudioMode(2);
		g_bShareSound = TRUE;
//		GetDlgItem(IDC_BUTSHARESOUND)->SetWindowText("sharesound");
	}
}
*/
void CNewclientDlg::OnSelchangeCombonetdelay() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	g_nNetDelay = m_NetDelayCtrl.GetCurSel();
}

void CNewclientDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int i = iActiveWndNumber;
	if (!NET_DVR_MakeKeyFrame(myoutput[i].m_lServerID, myoutput[i].m_iChannel))
	{
		AfxMessageBox("NET_DVR_MakeKeyFrame failed [%d]", NET_DVR_GetLastError());
	}

}

void CNewclientDlg::OnButxh() 
{
	// TODO: Add your control notification handler code here
	int i;
	
	i = iActiveWndNumber;
	if ( (myoutput[i].m_iPlayhandle >= 0) && (!myoutput[i].m_bCruise) )
	{
		NET_DVR_PTZCruise(myoutput[i].m_iPlayhandle, RUN_SEQ, 0, 0, 0);
		myoutput[i].m_bCruise = TRUE;
		GetDlgItem(IDC_BUTXH)->SetWindowText("停止巡航");
	}
	else if (myoutput[i].m_bCruise)
	{
		NET_DVR_PTZCruise(myoutput[i].m_iPlayhandle, STOP_SEQ, 0, 0, 0);
		myoutput[i].m_bCruise = FALSE;
		GetDlgItem(IDC_BUTXH)->SetWindowText("巡航");
	}
}

void CNewclientDlg::OnButjpegpic() 
{
	// TODO: Add your control notification handler code here
	int i;
	char cFilename[256];
	CString sTemp;
	NET_DVR_JPEGPARA JpegPara;
	
	i = iActiveWndNumber;
	JpegPara.wPicQuality = 0;
	JpegPara.wPicSize = 0;
	CTime time = CTime::GetCurrentTime();
	if (myoutput[i].m_iPlayhandle >= 0)
	{
		sTemp.Format("%s\\", ClientParam.m_csPictureSavePath);		
		if (GetFileAttributes(sTemp) != FILE_ATTRIBUTE_DIRECTORY)
		{
			CreateDirectory(sTemp, NULL);
		}
		sprintf(cFilename, "%s\\JPEG_%s_%02d_%4d%02d%02d_%02d%02d%02d_%d.jpg", ClientParam.m_csPictureSavePath, myoutput[i].m_csIP, myoutput[i].m_iChannel,	\
			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), GetTickCount());
		TRACE("Picture save file name : %s", cFilename);
		if (!ClientParam.m_bUseCard)
		{
			if (NET_DVR_CaptureJPEGPicture(myoutput[i].m_lServerID, myoutput[i].m_iChannel, &JpegPara, cFilename))
			{
				CString sTemp;	
				sTemp.Format("JPEG抓图成功 %s!",cFilename);
				AfxMessageBox(sTemp); 
				return;
			}
			else
			{
				AfxMessageBox("JPEG抓图失败!");
			}
		}
	}
}

void CNewclientDlg::OnMove(int x, int y) 
{
	CDialog::OnMove(x, y);
	Invalidate(TRUE);
	if (ClientParam.m_bUseCard)
		NET_DVR_RefreshSurface_Card();
	UpdateWindow();
	// TODO: Add your message handler code here
	
}


标签: 客户端源码

实例下载地址

c++ 监控软件客户端源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警