📄 regioncommview.cpp
字号:
}
}
//获取连接状态名称
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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -