www.pudn.com > gps-time.rar > RegionCommView.cpp


// RegionCommView.cpp : implementation of the CRegionCommView class 
// 
 
#include "stdafx.h" 
#include "RegionComm.h" 
#include "AddCom.h" 
#include "RegionCommDoc.h" 
#include "RegionCommView.h" 
#include "RegionSocket.h" 
#include "InputRegionNo.h" 
 
 
 
#include "dlgchgserver.h" 
//#include "AddCom.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
#define COM_NUM_COLUMNS			5 
#define SOCKET_NUM_COLUMNS		5 
#define DEV_NUM_COLUMNS			5 
 
static _TCHAR *_gszComColumnLabel[COM_NUM_COLUMNS] = 
{ 
	_T("设备名称"), _T("串口号"), _T("设备状态"), _T("波特率"), _T("描述") 
}; 
static int _gnComColumnFmt[COM_NUM_COLUMNS] =  
{ 
	LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT 
}; 
static int _gnComColumnWidth[COM_NUM_COLUMNS] = { 160, 60, 72, 80, 200 };//{ 160, 50, 72, 80, 200 }; 
static _TCHAR *_gszSocketColumnLabel[SOCKET_NUM_COLUMNS] = 
{ 
	_T("机器名"), _T("端口号"),	_T("设备状态"), _T("IP 地址"), _T("描述") 
}; 
static int _gnSocketColumnFmt[SOCKET_NUM_COLUMNS] =  
{ 
	LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_LEFT, LVCFMT_LEFT 
}; 
static int _gnSocketColumnWidth[SOCKET_NUM_COLUMNS] = { 120, 60, 72, 100, 200 };//{ 120, 50, 72, 100, 200 }; 
static _TCHAR *_gszDevColumnLabel[DEV_NUM_COLUMNS] = 
{ 
	_T("设备名称"), _T("设备号"), _T("设备状态"), _T("设备超时"), _T("描述") 
}; 
static int _gnDevColumnFmt[DEV_NUM_COLUMNS] =  
{ 
	LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_LEFT 
}; 
static int _gnDevColumnWidth[DEV_NUM_COLUMNS] = { 150, 60, 72, 70, 200 };//{ 150, 50, 72, 60, 200 }; 
 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CRegionCommView 
 
IMPLEMENT_DYNCREATE(CRegionCommView, CFormView) 
 
BEGIN_MESSAGE_MAP(CRegionCommView, CFormView) 
	//{{AFX_MSG_MAP(CRegionCommView) 
	ON_COMMAND(ID_EDIT_ADD, OnEditAdd) 
	ON_NOTIFY(TVN_SELCHANGING, IDC_TREE1, OnSelchangingTree1) 
	ON_COMMAND(ID_EDIT_DELETE, OnEditDelete) 
	ON_NOTIFY(NM_KILLFOCUS, IDC_LIST1, OnKillfocusList1) 
	ON_NOTIFY(NM_SETFOCUS, IDC_LIST1, OnSetfocusList1) 
	ON_NOTIFY(NM_KILLFOCUS, IDC_TREE1, OnKillfocusTree1) 
	ON_NOTIFY(NM_SETFOCUS, IDC_TREE1, OnSetfocusTree1) 
	ON_WM_TIMER() 
	ON_COMMAND(ID_CHECK_LICON, OnCheckLicon) 
	ON_COMMAND(ID_CHECK_LIST, OnCheckList) 
	ON_COMMAND(ID_CHECK_REPORT, OnCheckReport) 
	ON_COMMAND(ID_SYSTEM_REGIONNO, OnSystemRegionno) 
	ON_WM_CLOSE() 
	ON_COMMAND(ID_PROPERTY, OnProperty) 
	ON_WM_SIZE() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRegionCommView construction/destruction 
 
CRegionCommView::CRegionCommView() 
	: CFormView(CRegionCommView::IDD) 
{ 
	//{{AFX_DATA_INIT(CRegionCommView) 
	m_sClient = _T(""); 
	m_sServer = _T(""); 
	//}}AFX_DATA_INIT 
	// TODO: add construction code here 
	m_nFocusWnd = FW_UNKNOWN; 
	m_bRButtonClick = FALSE; 
	m_itemOld.hItem = NULL; 
	m_bottom = 0; 
	m_right =0; 
} 
 
CRegionCommView::~CRegionCommView() 
{ 
} 
 
void CRegionCommView::DoDataExchange(CDataExchange* pDX) 
{ 
	CFormView::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CRegionCommView) 
	DDX_Control(pDX, IDC_TREEHEAD, m_TreeHead_C); 
	DDX_Control(pDX, IDC_LISTHEADER, m_ListHeader_C); 
	DDX_Control(pDX, IDC_TREE1, m_Tree_C); 
	DDX_Control(pDX, IDC_LIST1, m_List_C); 
	DDX_Text(pDX, IDC_EDIT1, m_sClient); 
	DDX_Text(pDX, IDC_EDIT2, m_sServer); 
	//}}AFX_DATA_MAP 
} 
 
void CRegionCommView::OnInitialUpdate() 
{ 
	CFormView::OnInitialUpdate(); 
	CRegionCommDoc * pDoc = GetDocument(); 
	if (!pDoc->InitManagerView()) 
		return; 
	InitIconList(); 
	m_Tree_C.SetImageList(&m_SmallIcon, TVSIL_NORMAL); 
	ResetTreeCtrlFormat(); 
	m_List_C.SetImageList(&m_LargeIcon, LVSIL_NORMAL); 
	m_List_C.SetImageList(&m_SmallIcon, LVSIL_SMALL); 
	m_List_C.ModifyStyle(LVS_TYPEMASK,LVS_REPORT & LVS_TYPEMASK); 
	SetListCtrlFormat(DEVTYPE_REGION); 
	((CRegionCommApp *)AfxGetApp())->m_pStartUpDlg->DestroyWindow(); 
 
	m_Timer = SetTimer(1, 1000, NULL); 
	m_TimerSock= SetTimer(2, 30000, NULL); 
	m_TimerConnectCenter= SetTimer(3, 5000, NULL); 
	GetParentFrame()->RecalcLayout(); 
	ResizeParentToFit(FALSE); 
 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CRegionCommView diagnostics 
#ifdef _DEBUG   
CRegionCommDoc* CRegionCommView::GetDocument() // non-debug version is inline 
{ 
 	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRegionCommDoc))); 
 	return (CRegionCommDoc*)m_pDocument; 
} 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CRegionCommView message handlers 
//增加设备 
void CRegionCommView::OnEditAdd()  
{ 
	long length = m_Tree_C.GetCount(); 
	if(length>=63) 
		MessageBox("控制串口已经达到最大数61,不能增加了!","增加串口",MB_OK); 
	CAddCom dlg; 
	if (IDOK == dlg.DoModal())  
	{ 
		if (dlg.m_PortNo != 0)  
		{	 
			CString strPort; 
			strPort.Format("COM%d",dlg.m_PortNo);			 
			AfxGetApp()->WriteProfileInt("ComSetting",strPort,atoi(dlg.m_sBaud));  
			AfxGetApp()->WriteProfileInt("DTypeSetting",strPort,atoi(dlg.m_sDeviceType));  
			AfxGetApp()->WriteProfileInt("DNoSetting",strPort,atoi(dlg.m_sDeviceNo));  
			AfxGetApp()->WriteProfileString ("DepictSettings",strPort,dlg.m_Depict);  
			 
			UpdateTree(MAKELONG(DEVTYPE_COM, 0x00FF & dlg.m_PortNo), TRUE);			 
		} 
	}	 
} 
//显示Tree 
void CRegionCommView::ResetTreeCtrlFormat() 
{ 
	CRegionCommDoc * pDoc = GetDocument(); 
	CCommunication * pCommunication = pDoc->m_pCommunication; 
	m_Tree_C.DeleteAllItems(); 
	TV_INSERTSTRUCT TreeCtrlItem; 
 
	TreeCtrlItem.hParent = TVI_ROOT; 
	TreeCtrlItem.hInsertAfter = TVI_LAST; 
	TreeCtrlItem.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; 
	TreeCtrlItem.item.pszText = _T("区域机"); 
	TreeCtrlItem.item.lParam = DEVTYPE_REGION; 
	TreeCtrlItem.item.iImage = DT_ICON_REGION; 
	TreeCtrlItem.item.iSelectedImage = TreeCtrlItem.item.iImage; 
	HTREEITEM hTreeItem1 = m_Tree_C.InsertItem(&TreeCtrlItem); 
 
	TreeCtrlItem.hParent = hTreeItem1; 
	 
	TreeCtrlItem.item.pszText = _T("中心机"); 
	TreeCtrlItem.item.lParam = DEVTYPE_SERVERSOCKET; 
	TreeCtrlItem.item.iImage = DT_ICON_SOCKET; 
	TreeCtrlItem.item.iSelectedImage = TreeCtrlItem.item.iImage; 
	 
	m_Tree_C.InsertItem(&TreeCtrlItem); 
	// Add Com Port 
	TCHAR szBuf[30]; 
	TreeCtrlItem.item.iImage = DT_ICON_COM; 
	TreeCtrlItem.item.iSelectedImage = TreeCtrlItem.item.iImage; 
	for (int i = 0; i < pCommunication->m_aCom.GetSize(); i++)  
	{ 
		int nPortNo = pCommunication->m_aCom[i]->m_ComPort; 
		_stprintf(szBuf, _T("RS232通讯口%d"), 0x000000FF & nPortNo); 
		TreeCtrlItem.item.pszText = szBuf; 
		TreeCtrlItem.item.lParam = MAKELPARAM((WORD)DEVTYPE_COM, (WORD)(0x00FF & nPortNo)); 
		m_Tree_C.InsertItem(&TreeCtrlItem); 
	} 
} 
//初始化图标 
void CRegionCommView::InitIconList() 
{ 
	HICON hIcon; 
	HINSTANCE hInst = AfxGetInstanceHandle(); 
	int i; 
 
	m_LargeIcon.Create(::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), ILC_COLOR4, 2, 2); 
	m_SmallIcon.Create(::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), ILC_COLOR4, 2, 2); 
	 
	m_LargeIcon.SetBkColor(RGB(255, 255, 255)); 
	m_SmallIcon.SetBkColor(RGB(255, 255, 255)); 
	 
	for (i = 0; i < 7; i++) { 
		if (NULL == (hIcon = LoadIcon(hInst, MAKEINTRESOURCE((WORD)(IDI_ALLDEVICON+i))))) 
			continue; 
		m_LargeIcon.Add(hIcon); 
#ifdef _DEBUG 
		int index; 
		index = m_SmallIcon.Add(hIcon); 
#else 
		m_SmallIcon.Add(hIcon); 
#endif 
	} 
	if (NULL == (hIcon = LoadIcon(hInst, MAKEINTRESOURCE((WORD)(IDI_TSCCOMNOTCONNECT))))) 
		return; 
	m_LargeIcon.Add(hIcon); 
	m_SmallIcon.Add(hIcon); 
} 
//选择树的项目 
void CRegionCommView::OnSelchangingTree1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
	 
	BYTE  ShowType=(BYTE)(LOWORD(pNMTreeView->itemNew.lParam)); 
 
	switch(ShowType) 
	{ 
	case DEVTYPE_REGION: 
        SetListCtrlFormat(DEVTYPE_REGION); 
		break; 
	case DEVTYPE_SERVERSOCKET: 
        SetListCtrlFormat(DEVTYPE_SERVERSOCKET); 
		break; 
	default: 
		SetListCtrlFormat(pNMTreeView->itemNew.lParam); 
		break; 
	} 
	if (m_itemOld.hItem == NULL) 
	{		 
	  	m_itemOld = pNMTreeView->itemNew; 
	    m_Tree_C.SetItemState(m_itemOld.hItem, TVIS_BOLD, TVIS_BOLD); 
	}  
	else 
	{ 
		m_Tree_C.SetItemState(m_itemOld.hItem, 0, TVIS_BOLD|TVIS_SELECTED); 
		m_itemOld = pNMTreeView->itemNew; 
		m_Tree_C.SetItemState(m_itemOld.hItem, TVIS_BOLD|TVIS_SELECTED, TVIS_BOLD|TVIS_SELECTED); 
	}	 
	*pResult = 0; 
} 
//显示List 
void CRegionCommView::SetListCtrlFormat(DWORD devType) 
{ 
	LV_ITEM lvi; 
	LV_COLUMN lvc; 
	CString strName,Str; 
	TCHAR szBuf[80]; 
	CString strServerName; 
	UINT strServerPort; 
 
	CRegionCommDoc * pDoc = GetDocument(); 
	CCommunication * pCommunication = pDoc->m_pCommunication; 
 
	m_List_C.DeleteAllItems(); 
	for (int i = COM_NUM_COLUMNS-1; i >= 0; i--) 
		m_List_C.DeleteColumn(i); 
	 
	switch (0x0000FFFF & devType)  
	{ 
		case DEVTYPE_REGION: 
			m_ListHeader_C.SetWindowText(_T("区域机上的所有设备")); 
			lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
			for(i = 0; i < COM_NUM_COLUMNS; i++) 
			{ 
				lvc.iSubItem = i; 
				lvc.pszText = _gszComColumnLabel[i]; 
				lvc.cx = _gnComColumnWidth[i]; 
				lvc.fmt = _gnComColumnFmt[i]; 
				m_List_C.InsertColumn(i,&lvc); 
			} 
			//break; 
			lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
			lvi.iItem = 0; 
			lvi.iSubItem = 0; 
			lvi.pszText = _T("连接中心机的Socket口"); 
			lvi.lParam = DEVTYPE_SERVERSOCKET; 
			lvi.iImage = DT_ICON_SOCKET; 
	 
			m_List_C.InsertItem(&lvi); 
			m_List_C.SetItemText(0, LVISD_DEVSTATUS, LPCTSTR(GetStateString(pCommunication->m_pServerSocket->GetState()))); 
			m_List_C.SetItemText(0, LVISD_ADDITIONAL, LPCTSTR(pCommunication->m_pServerSocket->m_sConnectedAddress)); 
		 
			lvi.iImage = DT_ICON_COM; 
			for (i = 0; i < pCommunication->m_aCom.GetSize(); i++)  
			{ 
				int PortNo = (WORD)(0x00FF & pCommunication->m_aCom[i]->m_ComPort); 
				lvi.iItem = 1+i; 
				lvi.lParam = MAKELPARAM((WORD)DEVTYPE_COM, PortNo); 
				_stprintf(szBuf, _T("RS232通讯口%d"), PortNo); 
				lvi.pszText = szBuf; 
				 
				//lv add 060823 
				if(pCommunication->m_aCom[i]->IsConnected) 
					lvi.iImage =DT_ICON_COM; 
				else 
					lvi.iImage =DT_ICON_COMNOTCON; 
 
				m_List_C.InsertItem(&lvi); 
				_stprintf(szBuf, _T("%d"), PortNo); 
				m_List_C.SetItemText(lvi.iItem, LVISD_PORTNO, szBuf); 
				if(pCommunication->m_aCom[i]->IsConnected) 
				{ 
					    m_List_C.SetItemText(lvi.iItem,LVISD_DEVSTATUS,"联机"); 
				} 
				else 
				{					 
						m_List_C.SetItemText(lvi.iItem,LVISD_DEVSTATUS,"脱机"); 
				}				 
				_stprintf(szBuf, _T("%dbps"), pCommunication->m_aCom[i]->m_ComBitRate); 
				m_List_C.SetItemText(lvi.iItem, LVISD_ADDITIONAL, szBuf); 
				m_List_C.SetItemText(lvi.iItem, LVISD_DESCRIPTION, LPCTSTR(pCommunication->m_aCom[i]->m_Depict));				 
			} 
			break;	 
 
		case DEVTYPE_SERVERSOCKET: 
			lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
 
			for(i = 0; i < SOCKET_NUM_COLUMNS; i++) 
			{ 
				lvc.iSubItem = i; 
				lvc.pszText = _gszSocketColumnLabel[i]; 
				lvc.cx = _gnSocketColumnWidth[i]; 
				lvc.fmt = _gnSocketColumnFmt[i]; 
				m_List_C.InsertColumn(i,&lvc); 
			} 
			m_ListHeader_C.SetWindowText( _T("中心通信服务器")); 
			lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
			lvi.iItem = 0; 
			lvi.iSubItem = 0;			 
 
			strServerName=AfxGetApp()->GetProfileString(CenterServerConfigName,_T("ServerMachineName"),"");  
			_stprintf(szBuf, _T("%s"), LPCTSTR(strServerName)); 
 
			lvi.pszText = szBuf; 
 
			lvi.lParam = MAKELPARAM(DEVTYPE_SERVERSOCKET, 0); 
			lvi.iImage = DT_ICON_SOCKET; 
	 
			m_List_C.InsertItem(&lvi);			 
 
			strServerPort= AfxGetApp()->GetProfileInt(CenterServerConfigName,_T("ServerSocketPort"),0); 
			_stprintf(szBuf, _T("%d"), strServerPort); 
 
			m_List_C.SetItemText(0, LVISD_PORTNO, szBuf); 
			 
			m_List_C.SetItemText(0, LVISD_DEVSTATUS, LPCTSTR(GetStateString(pCommunication->m_pServerSocket->GetState()))); 
			m_List_C.SetItemText(0, LVISD_ADDITIONAL, LPCTSTR(pCommunication->m_pServerSocket->m_sConnectedAddress)); 
			 
			break; 
		 
		case DEVTYPE_COM: 
			{ 
				lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
				for(i = 0; i < DEV_NUM_COLUMNS; i++) 
				{ 
					lvc.iSubItem = i; 
					lvc.pszText = _gszDevColumnLabel[i]; 
					lvc.cx = _gnDevColumnWidth[i]; 
					lvc.fmt = _gnDevColumnFmt[i]; 
					m_List_C.InsertColumn(i,&lvc); 
				} 
				lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
				lvi.iSubItem = 0; 
				_stprintf(szBuf, _T("RS232通讯口%d"), HIWORD(devType)); 
				m_ListHeader_C.SetWindowText( szBuf); 
				int ComIndex= pCommunication->GetComIndexByPort((BYTE)HIWORD(devType)); 
			    CString str; 
				str.Format("%d",ComIndex);			 
				if(ComIndex<0) 
					return; 
				CComPort *pComPort = pCommunication->m_aCom.GetAt(ComIndex); 
				for (i = 0; i <1; i++) 
				{ 
					lvi.iItem = i;				 
					lvi.pszText = " 信号机";					 
					//lvi.iImage = 0; 
					//lv add 060823 
					if(pComPort->IsConnected) 
						lvi.iImage =DT_ICON_COM; 
					else 
						lvi.iImage =DT_ICON_COMNOTCON; 
 
	                lvi.lParam = devType; 
					m_List_C.InsertItem(&lvi); 
					_stprintf(szBuf, _T("%d"), pComPort->m_DeviceNo); 
					m_List_C.SetItemText(i, LVISD_DEVNO, szBuf); 
					 
					_stprintf(szBuf, _T("%d"), 15); 
					m_List_C.SetItemText(i, LVISD_TIMEOUT, szBuf); 
					if(pComPort->IsConnected) 
					{ 
					    m_List_C.SetItemText(i, LVISD_DEVSTATUS,"联机"); 
					} 
					else 
					{					 
						m_List_C.SetItemText(i, LVISD_DEVSTATUS,"脱机"); 
					} 
					m_List_C.SetItemText(i, LVISD_DESCRIPTION, LPCTSTR(pComPort->m_Depict)); 
				} 
			} 
			break; 
	} 
} 
//获取连接状态名称 
CString CRegionCommView::GetStateString(int nState) 
{ 
	CString str; 
 
	switch(nState) 
	{ 
	case DEV_UNKNOWN: 
		str = _T("未连接"); 
		break; 
	case DEV_CONNECTED: 
		str = _T("连接"); 
		break; 
	case DEV_ASKCONNECT: 
		str = _T("请求连接"); 
		break; 
	case DEV_SOCKCLOSED: 
		str = _T("关闭"); 
		break; 
	case DEV_DISCONNECTED: 
		str = _T("断接"); 
		break; 
	case DEV_COMOPENED: 
		str = _T("打开"); 
		break; 
	case DEV_COMCLOSED: 
		str = _T("关闭"); 
		break; 
	case DEV_LINEON: 
		str = _T("在线"); 
		break; 
	case DEV_LINEOFF: 
		str = _T("断线"); 
		break; 
	case DEV_CLOSED: 
		str = _T("关闭"); 
		break; 
	default: 
		str = _T(""); 
		break; 
	} 
	 
	return str; 
} 
//修改树 
void CRegionCommView::UpdateTree(DWORD dwDevType, BOOL bAdded) 
{ 
	DWORD selDevType; 
	TV_ITEM item; 
	TCHAR szBuf[80]; 
	HTREEITEM hTreeItem = m_Tree_C.GetSelectedItem(); 
	 
	if (hTreeItem == NULL) 
		hTreeItem = m_Tree_C.GetRootItem(); 
	 
	item.mask = TVIF_HANDLE | TVIF_PARAM; 
	item.hItem = hTreeItem; 
	item.stateMask = 0; 
	m_Tree_C.GetItem(&item); 
	selDevType = item.lParam; 
 
	hTreeItem = m_Tree_C.GetNextItem(m_Tree_C.GetRootItem(), TVGN_CHILD); 
	while (hTreeItem != NULL) { 
		item.mask = TVIF_HANDLE | TVIF_PARAM; 
		item.hItem = hTreeItem; 
		item.stateMask = 0; 
		m_Tree_C.GetItem(&item); 
		if (!bAdded) { 
			if ((DWORD)item.lParam == dwDevType) { 
				if (dwDevType == selDevType) { 
					HTREEITEM hNextItem = m_Tree_C.GetNextItem(hTreeItem, TVGN_NEXT); 
					m_Tree_C.SelectItem(hNextItem); 
				} 
				m_Tree_C.DeleteItem(hTreeItem); 
				if ((selDevType == DEVTYPE_REGION) | (selDevType == DEVTYPE_UNKNOWNDEV)) 
					SetListCtrlFormat(selDevType); 
				return; 
			} 
		} 
		hTreeItem = m_Tree_C.GetNextItem(hTreeItem, TVGN_NEXT); 
	} 
	if (bAdded) { 
	TV_INSERTSTRUCT ti; 
	ti.hParent = m_Tree_C.GetRootItem(); 
	ti.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; 
	_stprintf(szBuf, _T("RS232通讯口%d"), (WORD)HIWORD(dwDevType)); 
	ti.item.pszText = szBuf; 
	ti.item.lParam = dwDevType; 
	ti.item.iImage = DT_ICON_COM; 
	ti.item.iSelectedImage = ti.item.iImage; 
	m_Tree_C.InsertItem(&ti); 
	if (selDevType == DEVTYPE_REGION) 
		SetListCtrlFormat(DEVTYPE_REGION); 
	    return; 
	} 
} 
//删除设备 
void CRegionCommView::OnEditDelete()  
{ 
	if (IDOK != MessageBox(_T("真的要删除所选择的设备吗?"), _T("询问"), MB_ICONQUESTION | MB_OKCANCEL))  
		return;	 
 
	CRegionCommDoc * pDoc = (CRegionCommDoc *)GetDocument(); 
 
	if (m_nFocusWnd == FW_TREE)  
	{ 
		HTREEITEM  hTreeItem; 
		TV_ITEM item; 
		if (m_bRButtonClick) 
			hTreeItem = m_hTreeItem; 
		else 
		hTreeItem = m_Tree_C.GetSelectedItem(); 
		item.hItem = hTreeItem; 
		item.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_STATE; 
		m_Tree_C.GetItem(&item); 
		if ((0x0000FFFF & item.lParam) == DEVTYPE_COM)  
				pDoc->m_pCommunication->DeleteTscCom((BYTE)HIWORD(item.lParam)); 
		return; 
	}		 
 
	if (m_nFocusWnd == FW_LIST)  
	{ 
		LV_ITEM item; 
	 
		item.mask = LVIF_PARAM | LVIF_STATE; 
		item.stateMask = LVIS_SELECTED; 
		item.iSubItem = 0; 
		for (int i = 0; i < m_List_C.GetItemCount(); i++)  
		{ 
			item.iItem = i; 
			m_List_C.GetItem(&item); 
			if (item.state)  
			{ 
				if ((0x000000FF & item.lParam) == DEVTYPE_COM) 					 
					pDoc->m_pCommunication->DeleteTscCom((BYTE)HIWORD(item.lParam)); 
				 return; 
			} 
		} 
	} 
} 
 
void CRegionCommView::OnKillfocusList1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	m_nFocusWnd = FW_UNKNOWN; 
	*pResult = 0; 
} 
 
void CRegionCommView::OnSetfocusList1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	m_nFocusWnd = FW_LIST; 
	*pResult = 0; 
} 
 
void CRegionCommView::OnKillfocusTree1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	m_nFocusWnd = FW_UNKNOWN; 
	*pResult = 0; 
} 
 
void CRegionCommView::OnSetfocusTree1(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	m_nFocusWnd = FW_TREE; 
	*pResult = 0; 
} 
 
//获取设备名称 
void CRegionCommView::GetDevName(TCHAR *szBuf, int nBufLen, BYTE chDevType) 
{ 
	ASSERT(nBufLen >= 10); 
 
	switch (0x000000FF & chDevType) { 
	case 0: 
		_tcscpy(szBuf, _T("信号机")); 
		break; 
	case 1: 
		_tcscpy(szBuf, _T("情报板")); 
		break; 
	case 2: 
		_tcscpy(szBuf, _T("地图板")); 
		break; 
	default: 
		_tcscpy(szBuf, _T("未知设备")); 
	} 
 
} 
//定时 
void CRegionCommView::OnTimer(UINT nIDEvent)  
{	 
	if(m_Timer == nIDEvent) 
	{ 
		CRegionCommDoc * pDoc = GetDocument(); 
		CCommunication * pCommunication = pDoc->m_pCommunication; 
		pCommunication->AdjustDevConnect();	 
	} 
	///* 
	if(m_TimerSock == nIDEvent) 
	{ 
		CRegionCommDoc * pDoc = GetDocument(); 
		CCommunication * pCommunication = pDoc->m_pCommunication; 
		if(pCommunication->m_pServerSocket->m_IsConnected!=TRUE) 
		{ 
			pCommunication->m_pServerSocket->CloseSocket(); 
			if (pCommunication->m_pServerSocket->CreateSocket()) 
				pCommunication->m_pServerSocket->Connect(); 
			 
			//pCommunication->m_pServerSocket->OnClose(0); 
		} 
	} 
	//*/ 
	if(m_TimerConnectCenter == nIDEvent) 
	{ 
		CRegionCommDoc * pDoc = GetDocument(); 
		CCommunication * pCommunication = pDoc->m_pCommunication; 
		pCommunication->SendCenter(); 
	} 
	CFormView::OnTimer(nIDEvent); 
} 
 
 
 
void CRegionCommView::OnCheckLicon()  
{ 
	if ((m_List_C.GetStyle() & LVS_TYPEMASK )!= LVS_ICON) 
		m_List_C.ModifyStyle(LVS_TYPEMASK,LVS_ICON & LVS_TYPEMASK); 
} 
 
void CRegionCommView::OnCheckList()  
{	 
	if ((m_List_C.GetStyle() & LVS_TYPEMASK )!= LVS_LIST) 
		m_List_C.ModifyStyle(LVS_TYPEMASK,LVS_LIST & LVS_TYPEMASK); 
} 
 
 
void CRegionCommView::OnCheckReport()  
{ 
	if ((m_List_C.GetStyle() & LVS_TYPEMASK )!= LVS_REPORT) 
		m_List_C.ModifyStyle(LVS_TYPEMASK,LVS_REPORT & LVS_TYPEMASK); 
} 
 
 
 
//区域设置 
void CRegionCommView::OnSystemRegionno()  
{ 
	// TODO: Add your command handler code here 
	CInputRegionNo dlg; 
	CRegionCommDoc * pDoc = GetDocument(); 
	CString Str; 
	dlg.m_nRegionNo = 0x000000FF & pDoc->m_pCommunication->m_cRegionNo; 
	if (IDOK == dlg.DoModal()) 
	{ 
		if (dlg.m_nRegionNo != pDoc->m_pCommunication->m_cRegionNo)  
		{ 
			AfxGetApp()->WriteProfileInt(CenterServerConfigName,_T("RegionNO"),dlg.m_nRegionNo );			 
			::MessageBox(NULL,"需要重新启动程序修改的区域号才能有效","注意",MB_OK); 
		} 
	} 
} 
//重启系统 
void CRegionCommView::ResetSystem() 
{ 
	CRegionCommDoc * pDoc = GetDocument(); 
 
	if (!pDoc->InitManagerView()) 
		return ; 
	 
	ResetTreeCtrlFormat(); 
	SetListCtrlFormat(DEVTYPE_REGION); 
	return ; 
} 
//修改list的单个项目 
void CRegionCommView::UpdateList(DWORD dwParam) 
{	 
	HTREEITEM hTreeItem = m_Tree_C.GetSelectedItem(); 
	if (!hTreeItem) 
		hTreeItem = m_Tree_C.GetRootItem(); 
	TV_ITEM item; 
	item.hItem = hTreeItem; 
	m_Tree_C.GetItem(&item); 
	BYTE DevType = HIBYTE(HIWORD(dwParam)); 
	switch(DevType) 
	{ 
		case DEVTYPE_COM: 
			if ((0x0000FFFF & item.lParam) == DEVTYPE_COM)  
			{	 
				BYTE iComPort=LOBYTE(LOWORD(dwParam)); 
				if((BYTE)HIWORD(item.lParam) == iComPort) 
				{ 
					BOOL iIsConnected=LOBYTE(HIWORD(dwParam)); 
					 
					//lv add 060823 
					/* 
					LV_ITEM lvi; 
					m_List_C.GetItem(&lvi); 
					if(iIsConnected) 
						lvi.iImage =DT_ICON_COM; 
					else 
						lvi.iImage =DT_ICON_COMNOTCON; 
						/*/ 
 
					if(m_List_C.GetItemCount()>0)				 
						m_List_C.SetItemText(0, LVISD_DEVSTATUS,  
						(iIsConnected ? "联机" : "脱机" ));					 
				} 
			} 
			if ((0x0000FFFF & item.lParam) == DEVTYPE_REGION)  
			{	 
				BYTE iComPort=LOBYTE(LOWORD(dwParam)); 
                LVFINDINFO lviRgn; 
				lviRgn.flags=LVFI_PARAM; 
				lviRgn.lParam=MAKELONG((WORD)DEVTYPE_COM,(WORD)iComPort); 
                int itemIndex=m_List_C.FindItem(&lviRgn); 
				if(itemIndex>=0) 
				{ 
					BOOL iIsConnected=LOBYTE(HIWORD(dwParam)); 
 
					//lv add 060823 
					//*?? 
					m_List_C.SetSelectionMark(itemIndex); 
					LV_ITEM lvi; 
					m_List_C.GetItem(&lvi); 
					if(iIsConnected) 
						lvi.iImage =DT_ICON_COM; 
					else 
						lvi.iImage =DT_ICON_COMNOTCON; 
						//*/ 
					m_List_C.SetItem(&lvi); 
 
                    m_List_C.SetItemText(itemIndex, LVISD_DEVSTATUS,  
						(iIsConnected ? "联机" : "脱机" ));					 
				} 
			} 
			break; 
		case DEVTYPE_SERVERSOCKET: 
			if ((0x0000FFFF & item.lParam) == DEVTYPE_COM)  
			    return;				 
            if ( ((0x0000FFFF & item.lParam) == DEVTYPE_REGION) || 
				((0x0000FFFF & item.lParam) == DEVTYPE_SERVERSOCKET)  ) 
			{ 
                LVFINDINFO lviRgn; 
				lviRgn.flags=LVFI_PARAM; 
				lviRgn.lParam=DEVTYPE_SERVERSOCKET; 
                int itemIndex=m_List_C.FindItem(&lviRgn); 
				if(itemIndex>=0) 
				{ 
					CRegionCommDoc * pDoc = GetDocument(); 
					if(pDoc==NULL) 
						return; 
	                CCommunication * pCommunication = pDoc->m_pCommunication; 
					if(pCommunication==NULL) 
						return; 
					m_List_C.SetItemText(0, LVISD_DEVSTATUS,  
						LPCTSTR(GetStateString(pCommunication->m_pServerSocket->GetState())));			        					 
				} 
			} 
			break; 
	} 
	 
} 
 
void CRegionCommView::OnClose()  
{	 
	KillTimer(m_Timer); 
	CFormView::OnClose(); 
} 
//属性菜单 
void CRegionCommView::OnProperty()  
{	 
	int nFocusWnd; 
	nFocusWnd = m_nFocusWnd; 
	DlgChgServer dlg; 
	dlg.SetOwner(this); 
	dlg.DoModal(); 
} 
 
void CRegionCommView::OnSize(UINT nType, int cx, int cy)  
{ 
	CFormView::OnSize(nType, cx, cy); 
	 
	if(SIZE_MINIMIZED != nType) 
	{ 
		CWindowDC dc(this); 
		RECT rc; 
		int width, height; 
		TEXTMETRIC tm; 
		dc.GetTextMetrics(&tm); 
		height = tm.tmHeight + 6; //rc.bottom - rc.top + 6; 
		GetClientRect(&rc); 
		if(m_bottom == 0 && m_right == 0) 
		{ 
			m_bottom = rc.bottom; 
			m_right = rc.right; 
			return; 
		} 
		if(m_hWnd == NULL) 
			return; 
		if(m_bottom == rc.bottom && m_right == rc.right) 
			return; 
		m_bottom = rc.bottom; 
		m_right = rc.right; 
		width = (rc.right+2)*3/10; 
		if (width > rc.right) 
			width = rc.right+4; 
		RECT rect; 
		rect.left = rc.left+2; 
		rect.right = width-5; 
		rect.top = rc.top+20; 
		rect.bottom = rc.bottom-1; 
		if(m_Tree_C.m_hWnd == NULL) 
			return; 
		m_Tree_C.MoveWindow(&rect); 
		rect.left = width+2; 
		rect.right = rc.right-5; 
		m_List_C.MoveWindow(&rect); 
		rect.left = rc.left+2; 
		rect.right = width-5; 
		rect.top = rc.top+2; 
		rect.bottom = rc.top+15; 
		m_TreeHead_C.MoveWindow(&rect); 
		rect.left = width+2; 
		rect.right = rc.right-5; 
		m_ListHeader_C.MoveWindow(&rect); 
	} 
}