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

📄 regioncommview.cpp

📁 gps对时
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -