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);
}
}