📄 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -