// MainFrm.cpp : CMainFrame 类的实现 // #include "stdafx.h" #include "IDE.h" #include "Dlg_Pwd.h" #include "MainFrm.h" #include ".\mainfrm.h" #include #include #include #include #include #include //#include #include "Shlwapi.h" #include "DrawObj.h" #include "Graph.h" #include "ViewNameDlg.h" #include "Login.h" #include "IDEView.h" #include "SystemParaSetDlg.h" #include "public.h" #include "SysLib.h" #include "analogdlg.h" #include "ffsco.h" #include "Wizard.h" #include "Serial.h" #include "Network.h" #include "DlgUserManager.h" #include "Dlg_GroupManage.h" #include "ScriptSetDlg.h" #include "DlgEditPwd.h" #include "DlgQueryWarningRec.h" #include "DlgSystemLog.h" #include "DlgNoticeRec.h" #include "Dlg_ActionWithAlarm.h" #include "Dlg_EditView.h" #include "FileAndFolderClass.h" using namespace helper_coffs; #pragma warning ( disable: 4800 ) #ifdef _DEBUG #define new DEBUG_NEW #endif #if USE_TRAYICON #define WM_MY_TRAY_NOTIFICATION WM_USER + 1 const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated")); #endif // CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CMDIAutoHideFrame) BEGIN_MESSAGE_MAP(CMainFrame, CMDIAutoHideFrame) ON_WM_CREATE() ON_COMMAND(IP_SUPER_END, OnSuperEnd) ON_COMMAND(ID_TRAY_OPEN, OnTrayOpen) #if USE_TRAYICON ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification) ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated) #endif ON_WM_CLOSE() ON_COMMAND(ID_ADDDEVOCE, OnAdddevoce) ON_UPDATE_COMMAND_UI(ID_ADDDEVOCE, OnUpdateAdddevoce) ON_COMMAND(IDM_MENU_ZUTAIADD, OnZuTaiAdd) ON_UPDATE_COMMAND_UI(IDM_MENU_ZUTAIADD, OnUpdateZuTaiAdd) ON_COMMAND(ID_DELETEPORT, OnDeleteport) ON_UPDATE_COMMAND_UI(ID_DELETEPORT, OnUpdateDeleteport) ON_COMMAND(ID_ADD_PORT, OnAddPort) ON_UPDATE_COMMAND_UI(ID_ADD_PORT, OnUpdateAddPort) ON_COMMAND(ID_ADD_SCRIPT, OnAddScript) ON_UPDATE_COMMAND_UI(ID_ADD_SCRIPT, OnUpdateAddScript) ON_COMMAND(ID_ADDVIEW, OnAddview) ON_UPDATE_COMMAND_UI(ID_ADDVIEW, OnUpdateAddview) ON_COMMAND(ID_ADDVIEW2, OnAddview2) ON_UPDATE_COMMAND_UI(ID_ADDVIEW2, OnUpdateAddview2) ON_COMMAND(ID_ONLYADD_SORT, OnEditSort) ON_UPDATE_COMMAND_UI(ID_ONLYADD_SORT, OnUpdateEditSort) ON_COMMAND(ID_DELETEDEVICE, OnDeletedevice) ON_UPDATE_COMMAND_UI(ID_DELETEDEVICE, OnUpdateDeletedevice) ON_COMMAND(ID_DELETEVIEW, OnDeleteview) ON_UPDATE_COMMAND_UI(ID_DELETEVIEW, OnUpdateDeleteview) ON_COMMAND(ID_MODIFYVIEWNAME, OnModifyViewName) ON_UPDATE_COMMAND_UI(ID_MODIFYVIEWNAME, OnUpdateModifyViewName) ON_COMMAND(ID_DELETESCRIPT, OnDeletescript) ON_UPDATE_COMMAND_UI(ID_DELETESCRIPT, OnUpdateDeletescript) ON_COMMAND(ID_SETSCRIPT, OnSetscript) ON_UPDATE_COMMAND_UI(ID_SETSCRIPT, OnUpdateSetscript) ON_COMMAND(ID_EDITSCRIPT, OnEditscript) ON_UPDATE_COMMAND_UI(ID_EDITSCRIPT, OnUpdateEditscript) ON_COMMAND(ID_USERS, OnUsers) ON_UPDATE_COMMAND_UI(ID_USERS, OnUpdateUsers) ON_COMMAND(ID_EDITPWD, OnEditPwdTool) ON_UPDATE_COMMAND_UI(ID_EDITPWD, OnUpdateEditPwd) ON_COMMAND(ID_SYSPARE, OnSysPara) ON_UPDATE_COMMAND_UI(ID_SYSPARE, OnUpdateSysPare) ON_COMMAND(ID_EVENTMANAGE, OnEventmanage) ON_COMMAND(ID_EVENT, OnEvent) ON_COMMAND(ID_SUMMARY_LOG, OnSummaryLog) ON_UPDATE_COMMAND_UI(ID_EVENT, OnUpdateEvent) ON_UPDATE_COMMAND_UI(ID_SUMMARY_LOG, OnUpdateSummaryLog) ON_COMMAND(ID_CONTROLDIALOG, OnControldialog) ON_WM_DESTROY() ON_WM_TIMER() ON_COMMAND(ID_SYSTEMLOG, OnSystemLog) ON_UPDATE_COMMAND_UI(ID_SYSTEMLOG, OnUpdateSystemLog) ON_COMMAND(ID_NOTICEREC, OnNoticeRec) ON_UPDATE_COMMAND_UI(ID_NOTICEREC, OnUpdateNoticeRec) ON_COMMAND(ID_USER_MANAGER, OnUserManager) ON_COMMAND(ID_EDIT_PWD, OnEditPwd) ON_COMMAND(ID_GROUP_MANAGER, OnGroupManager) ON_COMMAND(ID_SINGLE_ANALOG, OnSingleAnalog) ON_UPDATE_COMMAND_UI(ID_SINGLE_ANALOG, OnUpdateSingleAnalog) ON_UPDATE_COMMAND_UI(ID_FILE_PRINT, OnUpdatePrint) END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // 状态行指示器 ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; HANDLE m_hFreshVarThread; HANDLE m_hReConnectSrvThread; static DWORD WINAPI FreshVarThread( void *pData ); static DWORD WINAPI FreshVarCurPicThread( void *pData ); CRITICAL_SECTION g_CSLimit; // CMainFrame 构造/析构 CMainFrame::CMainFrame():m_trayIcon(IDR_TRAYICON) { // TODO: 在此添加成员初始化代码 m_bShowTrayNotifications = TRUE;//zxn m_bShutdown = FALSE;//zxn #if USE_NEWTOP m_pToolBar = NULL; #else m_wndOfTop = NULL; #endif g_bRun=FALSE; g_nElementNo=0; //选择 g_bEdit=TRUE; m_bHideLeft=FALSE; m_mousePoint=CPoint(0,0); // View个数 m_nViewCount = 0; m_nPortNum = 0; m_nScripts = 0; int i, j; //mdi子窗体 for( i = 0; i < MAX_VIEW_NUM; i++ ) { m_pViewIDE[i] = NULL; } //串口设备 for( i = 0; i < MAX_SERIAL_NUM; i++ ) { for( j = 0; j < MAX_DEVICE_NUM; j++ ) { m_hSerialDev[i][j] = NULL; } } //串口组 for( i = 0; i < MAX_SERIAL_NUM; i++ ) { m_hSerialGroup[i] = NULL; } //以太网设备 for( i = 0; i < MAX_NETWORK_NUM; i++ ) { m_hNetworkDev[i] = NULL; } //脚本 for( i = 0; i < MAX_SCRIPT_NUM; i++ ) { m_hScriptGroup[i] = NULL; } m_bEvent = true; m_bPrint = true; m_bUsers = true; m_bSysPare = true; m_bAnalog = true; m_bDeviceLog = true; m_bSystemLog = true; m_bNoticeRec = true; m_bEditPwd = true; m_hCurrent = NULL; for( int i=0;iSetDBType(g_strDBType); pVariantsManager->SetDBType(g_strDBType); pVariantsManager->m_strLowerLimit = CString(g_strLowerLimit)+CString(g_strAlarm); pVariantsManager->m_strUpperLimit = CString(g_strUpperLimit)+CString(g_strAlarm); pVariantsManager->m_strCurrValue = CString(g_strCurrValue); pVariantsManager->m_strReturnNormal = CString(g_strReturnNormal2); pEventServer = new CEventServer; pEventServer->m_bValid = true; pEventServer->Validate( g_bEventAlarm ); // 一定要先load设备管理,否则变量无法关联到设备 if( g_nIsDemo == 1 ) { pDevicesManager->Load(g_strDirectory); pVariantsManager->Load(g_strDirectory); } else { pDevicesManager->GetDevInfo();//pDevicesManager->Load(g_strDirectory);// pVariantsManager->GetVarInfo();//pVariantsManager->Load(g_strDirectory); pVariantsManager->ReadAreaDericeUid(g_strDirectory); } LoadRunPara(); /////////////////////////////////////////////////////////////////////// //MakeFolderExist( "D:\\isP-Other\\StoueULog\\" ); ////////////////////////////////////////////////////////////// if( g_nIsDemo == 0 ) { bool bIsBoxAppear = false; for( int iPortIndex=0;iPortIndex<2;iPortIndex++ ) { CString sPortTemp; sPortTemp.Format("%d",atoi(g_strServerPort)+iPortIndex ); if( !pDevicesManager->Connection(g_strServerIP,sPortTemp) ) { LOG4C((LOG_NOTICE, "Socket Port %s 连接失败(%d)",sPortTemp,GetLastError())); if( !bIsBoxAppear && g_iAutoRunSystem==0 ) MessageBox(g_strConnectionFailed, g_strTip, MB_ICONINFORMATION); bIsBoxAppear = true; pDevicesManager->SetSocketStatus(FALSE,sPortTemp); //break; } else { pDevicesManager->SetSocketStatus(TRUE,sPortTemp); pVariantsManager->SetSysComunicationVar( 0.0 ); if( TRUE == pDevicesManager->GetSocketStatus( sPortTemp ) ) { LOG4C((LOG_NOTICE, "Socket Port %s 连接成功(%d)",sPortTemp,GetLastError())); } if( iPortIndex==0 ) pDevicesManager->GetServerVer( sPortTemp ); } } } CRect rect1; GetWindowRect(&rect1); ScreenToClient(&rect1); pVariantsManager->m_bAnalogAlarm = g_bYcEvent; if( g_nAlarmModeIsDlg && g_bStartRun ) { int screenx=GetSystemMetrics(SM_CXSCREEN); int screeny=GetSystemMetrics(SM_CYSCREEN); //系统任务栏的高度 HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL); RECT rc; ::GetWindowRect(hWnd, &rc); int nHeight = rc.bottom-rc.top; m_dlgEvent = new CRealEventDlg(); m_dlgEvent->Create(IDD_REALEVENT, this); //m_dlgEvent->ShowWindow(SW_HIDE); CRect rct; m_dlgEvent->GetWindowRect(&rct); m_dlgEvent->SetWindowPos(&wndTop, (screenx-rct.Width())/2, screeny-rct.Height()-nHeight, rct.Width(), rct.Height(), SWP_NOZORDER); m_dlgControl = new CDlgBmp(); m_dlgControl->Create(IDD_DIALOGCONTROL, this); m_dlgControl->ShowWindow(SW_HIDE); CRect rct1; m_dlgControl->GetWindowRect(&rct1); m_dlgControl->SetWindowPos(&wndTop, screenx-rct1.Width(), screeny-rct1.Height(), rct1.Width(), rct1.Height(), SWP_NOZORDER); m_hbottomDockBar.AddPage(m_dlgEvent, g_strNoticeList, IDI_WARING); } if( !g_bStartRun ) { m_pDlgZuTaiAdd = new CDlg_ZuTaiAdd(); m_pDlgZuTaiAdd->Create(IDD_DLG_ZUTAI_ADD, this); m_pDlgZuTaiAdd->ShowWindow(SW_HIDE); int screenx=GetSystemMetrics(SM_CXSCREEN); int screeny=GetSystemMetrics(SM_CYSCREEN); //系统任务栏的高度 HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL); RECT rc; ::GetWindowRect(hWnd, &rc); int nHeight = rc.bottom-rc.top; CRect rct; m_pDlgZuTaiAdd->GetWindowRect(&rct); m_pDlgZuTaiAdd->SetWindowPos(&wndTop, (screenx-rct.Width())/2, (screeny-rct.Height())/2, rct.Width(), rct.Height(), SWP_NOZORDER); } // 初始化左边树形 InitTreeInfo(); int W=0,H=0; if (g_bStartRun) { if( g_nIsDemo == 0 ) { // 加载脚本信息 //LoadScriptFromFiles(); } OnRun(); } else { //LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); //style&=~WS_CAPTION; //style&=~WS_BORDER; //::SetWindowLong(m_hWnd,GWL_STYLE,style); int screenx=GetSystemMetrics(SM_CXSCREEN); int screeny=GetSystemMetrics(SM_CYSCREEN); //系统任务栏的高度 HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL); RECT rc; ::GetWindowRect(hWnd, &rc); int nHeight = rc.bottom -rc.top; if( !g_bFullScreen ) { W = screenx; H = screeny-nHeight; //SetWindowPos(&wndTopMost,0,0,screenx,screeny-nHeight,SWP_NOZORDER); } else { W = screenx; H = screeny; //SetWindowPos(NULL,0,0,screenx,screeny,SWP_NOZORDER);// 全屏 } } #if USE_TRAYICON m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION); m_trayIcon.SetIcon(IDR_MAINFRAME); #endif // Install the tab view here VERIFY(m_MDIClient.SubclassMDIClient(this, &m_wndViewManager)); if( g_nToolbarTop ) { m_wndViewManager.ShowWindow(SW_SHOW); } else { m_wndViewManager.ShowWindow(SW_HIDE); } if( g_strStartPic.Compare("") ) { char picDir[_MAX_PATH] = {0}; strcpy(picDir, g_strDirectory); strcat(picDir, "\\"); strcat(picDir, _PICTUREDIR); strcat(picDir, g_strStartPic); strcat(picDir, ".view"); AddIDEView( g_strStartPic, CString(picDir) ); } if( g_nIsPoll == 1 ) { SetTimer(1, 1000, NULL); } if( g_bStartRun ) { ShowCaptionMenu(FALSE); } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_ALARM_SEARCH,"" ) ) { m_bEvent = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_PRINT,"" ) ) { m_bPrint = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_USER_MANAGE,"" ) ) { m_bUsers = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_RUNSTATUS,"" ) ) { m_bSysPare = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_DICT,"" ) ) { m_bAnalog = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_DEVICELOG,"" ) ) { m_bDeviceLog = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_SYSTEMLOG,"" ) ) { m_bSystemLog = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_NITICEREC,"" ) ) { m_bNoticeRec = false; } if( -1==PMS_VerifyUserPermit( g_nUserID,PMS_R_EDITPWD,"" ) ) { m_bEditPwd = false; } //展开树 //m_wndTree.Expand(m_wndTree.GetRootItem(),TVE_EXPAND); //HTREEITEM handleTreeItem = m_wndTree.GetRootItem(); //while(handleTreeItem) //{ // handleTreeItem = m_wndTree.GetChildItem(handleTreeItem); // m_wndTree.Expand(handleTreeItem, TVE_EXPAND); //} MyExpandTree( m_wndTree.GetRootItem() ); m_wndStatusBar.SetPaneText(2, "ver"); m_wndStatusBar.SetPaneText(3, g_strVersion); if( g_bRun ) SetTimer(2, 1000*15*1, NULL);//狗信息定时器 //SetTimer(3, 1000*60*2, NULL);//判断变量在这个时间段时否报警 if( !g_nToolbarLeft && g_bStartRun ) m_hleftDockBar.ShowWindow( SW_HIDE ); //m_wndDockPageBar1.OnStudClick(); //通知列表 if( g_nAlarmModeIsDlg && g_bRun ) { m_hbottomDockBar.ShowWindow(SW_SHOW); CSize sz; sz = m_hbottomDockBar.GetHorSize(); m_dlgEvent->SetPos( sz.cx,sz.cy ); m_hbottomDockBar.OnStudClick(); } else { m_hbottomDockBar.ShowWindow(SW_HIDE); } //工具栏 if( g_bStartRun && g_nToolbarRun ) { #if USE_NEWTOP m_pToolBar = new CDlg_ToolBar(); m_pToolBar->Create(IDD_DLG_TOOLBAR, this); m_pToolBar->ShowWindow( SW_SHOW ); m_htopDockBar.AddPage( m_pToolBar, "工具栏", IDR_MAINFRAME ); m_htopDockBar.ShowWindow(SW_SHOW); CSize sz; sz = m_htopDockBar.GetHorSize(); // 获取顶部工具栏大小; m_pToolBar->SetPos( sz.cx,sz.cy ); #else // 1.获取实际工具栏长宽 [8/29/2013 Z.t] CSize sz; sz = m_htopDockBar.GetHorSize(); // 2.创建工具栏上的对话框 [8/29/2013 Z.t] m_wndOfTop = new CDlgOfTop(); // 3.传递对话框的大小; m_wndOfTop->_ClientSize.cx = sz.cx; m_wndOfTop->_ClientSize.cy = sz.cy; m_wndOfTop->Create(IDD_TOP, this); m_wndOfTop->ShowWindow( SW_SHOW ); m_htopDockBar.AddPage( m_wndOfTop, "工具栏", IDR_MAINFRAME ); m_htopDockBar.ShowWindow(SW_SHOW); //m_wndOfTop->CalcWindowRect(sz); #if 0 // 一直为1 [8/29/2013 Z.t] m_wndOfTop->MoveWindow(0,0,sz.cx,sz.cy); CRect rtOfTop; m_wndOfTop->GetWindowRect(rtOfTop); // sz,得到是运行后工具栏的实际长宽 [7/27/2013 Zero] // sy,得到是创建m_htopDockBar时的原始大小 [7/27/2013 Zero] CSize sy = m_htopDockBar.GetVerSize(); //m_wndOfTop->SetPos( sz.cx,sz.cy ); TRACE("--on--"); #endif #endif } if( !g_bStartRun && g_nIsDemo==0 ) { this->SetFocus(); SetWindowPos(NULL,0,0,W,H,SWP_NOZORDER);//使连接服务器失败的情况下,第一时间显示在桌面 } else if( g_nIsDemo==1 ) { int screenx=GetSystemMetrics(SM_CXSCREEN); int screeny=GetSystemMetrics(SM_CYSCREEN); //系统任务栏的高度 HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL); RECT rc; ::GetWindowRect(hWnd, &rc); int nHeight = rc.bottom-rc.top; SetWindowPos(NULL,0,0,screenx,screeny-nHeight,SWP_NOZORDER); } return 0; } void CMainFrame::MyExpandTree(HTREEITEM hTreeItem) { if(!m_wndTree.ItemHasChildren(hTreeItem)) { return; } HTREEITEM hNextItem = m_wndTree.GetChildItem(hTreeItem); while (hNextItem != NULL) { MyExpandTree(hNextItem); hNextItem = m_wndTree.GetNextItem(hNextItem, TVGN_NEXT); } m_wndTree.Expand(hTreeItem,TVE_EXPAND); } DWORD WINAPI CMainFrame::ViewPollThread( void *pData ) { CMainFrame *pMainFrm = (CMainFrame *)pData; DWORD dwTick = 0; do { if (g_bStartRun && g_nIsPoll == 1) { for( int i = 0; i < g_nPollCount; i++ ) { if( dwTick == 0 ) { if( g_nPollIndex == i ) { dwTick = GetTickCount(); if( pMainFrm ) { //TRACE("Enter AddIDEView %s, %s\r\n", g_strPollPath, g_strPollDesc); //pMainFrm->AddIDEView(g_strPollDesc[i], g_strPollPath[i]); //TRACE("Leave AddIDEView\r\n"); ((CIDEView *)pMainFrm->m_pActiveView)->ChangeView(); int nIndex = pMainFrm->GetIDEViewIndex(g_strPollPath[i]); if( nIndex == -1 ) { nIndex = pMainFrm->GetIDEViewFreeIndex(g_strPollPath[i]); if( nIndex == -1 ) nIndex = 0; CCreateContext context; pMainFrm->m_pViewIDE[nIndex] = new CChildFrame; pMainFrm->m_pViewIDE[nIndex]->m_strPath = g_strPollPath[i]; pMainFrm->m_pViewIDE[nIndex]->m_strDesc = g_strPollDesc[i]; context.m_pCurrentDoc = pMainFrm->m_pDoc; context.m_pNewDocTemplate = pMainFrm->m_pDoc->GetDocTemplate(); context.m_pNewViewClass = RUNTIME_CLASS( CIDEView ); context.m_pCurrentFrame = pMainFrm; context.m_pLastView = NULL; if( !pMainFrm->m_pViewIDE[nIndex]->LoadFrame(IDI_SUMMARY, WS_MAXIMIZE|WS_OVERLAPPEDWINDOW, pMainFrm, &context) ) { } pMainFrm->m_pViewIDE[nIndex]->ShowWindow(SW_SHOWMAXIMIZED); pMainFrm->m_pViewIDE[nIndex]->InitialUpdateFrame(pMainFrm->m_pDoc,true); pMainFrm->m_pViewIDE[nIndex]->MDIActivate(); pMainFrm->m_nViewCount++; } else { pMainFrm->m_pActiveView = (CFormView *)pMainFrm->m_pViewIDE[nIndex]->GetActiveView(); pMainFrm->m_pViewIDE[nIndex]->MDIActivate(); } pMainFrm->m_pViewIDE[ nIndex ]->m_bClose = FALSE; pMainFrm->m_pActiveView = (CFormView *)pMainFrm->m_pViewIDE[nIndex]->GetActiveView(); g_strViewName = g_strPollPath[i]; ((CIDEView *)pMainFrm->m_pActiveView)->ChangeView(); } } } else if( GetTickCount() - dwTick > (DWORD)g_nPollInterval * 1000 ) { if( g_nPollIndex == g_nPollCount - 1 ) { g_nPollIndex = 0; } else { g_nPollIndex++; } dwTick = 0; } } } }while( WaitForSingleObject( g_hRunObject, 125L ) == WAIT_TIMEOUT ); return 0; } void CMainFrame::ShowCaptionMenu(BOOL bShow) { static HMENU hMenu=NULL; if(hMenu == NULL) { hMenu=::GetMenu(this->GetSafeHwnd()); } if(bShow) { ::SetMenu(this->GetSafeHwnd(),hMenu); this->ModifyStyle(0,WS_CAPTION,SWP_FRAMECHANGED); } else { ::SetMenu(this->GetSafeHwnd(),NULL); this->ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED); } } void CMainFrame::LoadRunPara() { char Path[_MAX_PATH] = {0}; strcat(Path, g_strDirectory); strcat(Path,"\\"); strcat(Path, _PROJECTDIR); strcat(Path,"\\"); strcat(Path, "runpara.ini"); char RUN[MAX_PATH] = {0}; memset(RUN, 0, sizeof(RUN)); //CString str; if ( GetPrivateProfileString("RUNPARA", "STARTRUN","",RUN, 10, Path) != 0) { g_bStartRun = (RUN[0] == '1' ? true:false); } if ( GetPrivateProfileString("RUNPARA", "STARTPIC","", RUN, sizeof(RUN), Path) != 0) { g_strStartPic = RUN; } if ( GetPrivateProfileString("RUNPARA", "STARTPATH","",RUN, sizeof(RUN), Path) != 0) { g_strStartPath = RUN; } if ( GetPrivateProfileString("RUNPARA", "ALARM","",RUN, 10, Path) != 0) { g_bEventAlarm = RUN[0] == '1' ? true:false; } if ( GetPrivateProfileString("RUNPARA", "VOICE", "",RUN, 10, Path) != 0) { g_bAlarmVoice = RUN[0] == '1' ? true:false; } if ( GetPrivateProfileString("RUNPARA", "HIDETASK","",RUN, 10, Path) != 0) { g_bHideTask = RUN[0] == '1' ? true:false; } } BOOL CMainFrame::DirSearch(CString strPath, CString strFileName) { BOOL bResult = FALSE; long hDir; struct _finddata_t fDir; int nDone; strPath += "*.*"; hDir = _findfirst( (char *)(LPCTSTR)strPath, &fDir ); if( -1L != hDir ) { while( !( nDone = _findnext(hDir, &fDir) ) ) { if( !strcmp(fDir.name, "..") ) continue; if( (_A_SUBDIR == fDir.attrib) ) { CString str = fDir.name; if( !str.Compare(strFileName) ) { bResult = TRUE; } } } } return bResult; } int CMainFrame::GetLevel( CString sContent ) { int nRet=0; for( int i=0;i=0;i-- ) { if( sContent[i]=='\\' ) { sRet = sContent.Left( i ); break; } } return sRet; } CString CMainFrame::GetLastStr( CString sContent ) { CString sRet; for( int i=sContent.GetLength()-1;i>=0;i-- ) { if( sContent[i]=='\\' ) { sRet = sContent.Right( sContent.GetLength()-i-1 ); break; } } return sRet; } void CMainFrame::InsertToCStringArray( CStringArray &SA,int iInsertIndex,CString sContent,CString sPath ) { CString str; if( sContent.Find(".view")!=-1 ) sContent = sContent.Left( sContent.GetLength()-5 ); CString sParent; if( m_sPath!=sPath ) sParent = sPath.Right( sPath.GetLength()-m_sPath.GetLength() ); if( sParent!="" ) { sContent = sParent+sContent; } bool bExist=false; for( int i=0;i=0;i-- ) { str = SA.GetAt( i ); if( str.Find( s1 )==0 ) { nInsert = i+1; break; } } SA.InsertAt( nInsert,sContent ); } } void CMainFrame::FileSearchCHN( CStringArray &SA,CStringArray &SATemp,int iInsertIndex, CString strPath, CString strFileName, int nLayer ) { long hfile; struct _finddata_t fFile; CString strCurr = strPath + strFileName; // + "\\" + CString sIndex,sContent; int nDone=0; int nTime = 0; hfile = _findfirst( (char *)(LPCTSTR)strCurr, &fFile ); if( -1L != hfile ) { while( !( nDone = _findnext(hfile, &fFile) ) ) { if( !strcmp(fFile.name,"..") ) continue; if( (_A_SUBDIR == fFile.attrib) ) { strCurr = strPath + "\\" + fFile.name + "\\"; int nPos = strCurr.Find("\\\\"); if( nPos!=-1 ) { strCurr.Delete( nPos ); } CString str = fFile.name; sContent = str; InsertToCStringArray( SA,iInsertIndex,sContent,strPath ); //////////////////////////////////////////////////////////// if( sContent.Find(".view")!=-1 ) sContent = sContent.Left( sContent.GetLength()-5 ); CString sParent; if( m_sPath!=strPath ) sParent = strPath.Right( strPath.GetLength()-m_sPath.GetLength() ); if( sParent!="" ) { sContent = sParent+sContent; } SATemp.Add( sContent ); //////////////////////////////////////////////////////////// iInsertIndex++; FileSearchCHN( SA,SATemp,iInsertIndex, strCurr, "*.*", nLayer + 1); if( g_bStartRun ) { CString sPath = strCurr; int nPos = sPath.Find("*"); if( nPos!=-1 ) { sPath = sPath.Left( sPath.GetLength()-3 ); } sPath = sPath+".view"; nPos = sPath.Find("\\."); if( nPos!=-1 ) { sPath.Delete( nPos ); } } } else { CString str = fFile.name; if( str.Right(4).Compare("view") ) continue; CString strTemp = str.Left(str.GetLength()-5); if( !DirSearch(strPath + "\\", strTemp ) ) { sContent = str; InsertToCStringArray( SA,iInsertIndex,sContent,strPath ); iInsertIndex++; //////////////////////////////////////////////////////////// CString str; if( sContent.Find(".view")!=-1 ) sContent = sContent.Left( sContent.GetLength()-5 ); CString sParent; if( m_sPath!=strPath ) sParent = strPath.Right( strPath.GetLength()-m_sPath.GetLength() ); if( sParent!="" ) { sContent = sParent+sContent; } SATemp.Add( sContent ); //////////////////////////////////////////////////////////// } } } _findclose(hfile); } } //交换机 //服务器 //服务器\1号服务器 //服务器\1号服务器\1号服务器 //服务器\1号服务器\2号服务器 //服务器\1号服务器\3号服务器 //服务器\2号服务器 //服务器\2号服务器\1号服务器 //服务器\2号服务器\2号服务器 //a void CMainFrame::AddViewToTree( HTREEITEM hItem, CStringArray &SA ) { HTREEITEM hRoot; HTREEITEM hTemp[10]; HTREEITEM hItemInsert=hItem; hRoot = hItem; hTemp[0] = hItem; int nSize = SA.GetCount(); int nLevel1=0,nLevel2=0; CString sView,sPath,sTemp; for( int i=0;i0 ) sView = GetLastStr( sView ); hItem = m_wndTree.InsertItem(sView, 1, 1, hItemInsert); hTemp[nLevel2] = hItem; if( nLevel1!=nLevel2 ) nLevel1 = nLevel2; sPath = m_sPath + sTemp+".view"; int nInsertIndex=0; if( !GetPicIndexByPicPath( nInsertIndex,sPath ) ) { InsertPicPathToStruct( nInsertIndex,sPath ); //LOG4C((LOG_NOTICE, "画面%d:%s", nInsertIndex,sPath)); } } } void CMainFrame::FileSearch(HTREEITEM hItem, CString strPath, CString strFileName, int nLayer) { long hfile; struct _finddata_t fFile; CString strCurr = strPath + strFileName; // + "\\" + HTREEITEM hTemp = hItem; int nDone=0; int nTime = 0; hfile = _findfirst( (char *)(LPCTSTR)strCurr, &fFile ); if( -1L != hfile ) { while( !( nDone = _findnext(hfile, &fFile) ) ) { if( !strcmp(fFile.name,"..") ) continue; if( (_A_SUBDIR == fFile.attrib) ) { strCurr = strPath + "\\" + fFile.name + "\\"; int nPos = strCurr.Find("\\\\"); if( nPos!=-1 ) { strCurr.Delete( nPos ); } CString str = fFile.name; HTREEITEM hReturn = hItem; hItem = m_wndTree.InsertItem(str, 1, 1, hItem); FileSearch(hItem, strCurr, "*.*", nLayer + 1); hItem = hReturn; if( g_bStartRun ) { CString sPath = strCurr; int nPos = sPath.Find("*"); if( nPos!=-1 ) { sPath = sPath.Left( sPath.GetLength()-3 ); } sPath = sPath+".view"; nPos = sPath.Find("\\."); if( nPos!=-1 ) { sPath.Delete( nPos ); } int nInsertIndex=0; if( !GetPicIndexByPicPath( nInsertIndex,sPath ) ) { InsertPicPathToStruct( nInsertIndex,sPath ); //LOG4C((LOG_NOTICE, "画面%d:%s", nInsertIndex,sPath)); } } } else { CString str = fFile.name; if( str.Right(4).Compare("view") ) continue; CString strTemp = str.Left(str.GetLength()-5); if( !DirSearch(strPath + "\\", strTemp ) ) { m_wndTree.InsertItem(strTemp, 1, 1, hTemp); } //m_wndTree.SortChildren( hItem ); if( g_bStartRun ) { CString sPath = strPath; int nPos = sPath.Find("*"); if( nPos!=-1 ) { sPath = sPath.Left( sPath.GetLength()-3 ); } sPath = sPath+strTemp+".view"; int nInsertIndex=0; if( !GetPicIndexByPicPath( nInsertIndex,sPath ) ) { InsertPicPathToStruct( nInsertIndex,sPath ); //LOG4C((LOG_NOTICE, "画面%d:%s", nInsertIndex,sPath)); } } } } _findclose(hfile); } } // 删除目录 void CMainFrame::DeleteDirectory(CString strDir) { if(strDir.IsEmpty()) { RemoveDirectory(strDir); return; } // 首先删除文件及子文件夹 CFileFind ff; BOOL bFound = ff.FindFile(strDir+"\\*", 0); while(bFound) { bFound = ff.FindNextFile(); if(ff.GetFileName()=="."||ff.GetFileName()=="..") continue; // 去掉文件(夹)只读等属性 SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL); if(ff.IsDirectory()) { // 递归删除子文件夹 DeleteDirectory(ff.GetFilePath()); RemoveDirectory(ff.GetFilePath()); } else { DeleteFile(ff.GetFilePath()); // 删除文件 } } ff.Close(); // 然后删除该文件夹 if (!RemoveDirectory(strDir)) { //ff.Close(); //Sleep( 1000 ); RemoveDirectory(strDir); } } void CMainFrame::InitTreeInfo(void) { m_wndTree.SetItemHeight(20); m_wndImageList.DeleteImageList(); m_wndImageList.Create(IDB_LEFT, 16, 1, RGB(255, 0, 255)); m_wndTree.SetImageList(&m_wndImageList, LVSIL_NORMAL); m_wndTree.SetBkColor( RGB(230,241,249) ); m_wndTree.DeleteAllItems(); m_hMonitor = m_wndTree.InsertItem(g_strMoniterSite,0,0); if( !g_bStartRun ) { m_hleftDockBar.m_bDrawStudBtn = true; m_hIOGroup = m_wndTree.InsertItem(g_strDevice,2,2); m_hEtherNet = m_wndTree.InsertItem(g_strEthernet,3,3,m_hIOGroup); m_hSerial = m_wndTree.InsertItem(g_strSerial,4,4,m_hIOGroup); m_hVariant = m_wndTree.InsertItem(g_strDataDict,11,11); m_hAnalog = m_wndTree.InsertItem(g_strVarSet,15,15,m_hVariant); m_hScript = m_wndTree.InsertItem(g_strScriptManage,13,13); m_hActionWithAlarm = m_wndTree.InsertItem(g_strActionWithAlarm,13,13); m_hSystem = m_wndTree.InsertItem(g_strSysParam,9,9); //插入串口和网络设备 int nComportSize = pDevicesManager->m_channels.GetSize(); for (int i = 0; i < nComportSize; i++) { CChannel* pComport = pDevicesManager->m_channels[i]; if( pComport->m_nCommunicateType == 0 ) // 串口设备 { m_hSerialGroup[i] = m_wndTree.InsertItem(pComport->m_strName,5,5,m_hSerial); m_nPortNum++; int nDeviceSize = pComport->m_Devices.GetSize(); for (int j = 0; j < nDeviceSize; j++) { CDevice* pDev = pComport->m_Devices[j]; m_hSerialDev[i][j] = m_wndTree.InsertItem(pDev->m_strName,4,4,m_hSerialGroup[i]); } } else if( pComport->m_nCommunicateType == 1 ) // 网络设备 { int nDeviceSize = pComport->m_Devices.GetSize(); for( int j = 0; j < nDeviceSize; j++ ) { CDevice *pDev = pComport->m_Devices[j]; m_hNetworkDev[j] = m_wndTree.InsertItem(pDev->m_strName, 2, 2, m_hEtherNet); } } } } //显示画面 CString strFindPicFile = "*.view"; char szPicDir[MAX_PATH] = {0}; strcpy(szPicDir, g_strDirectory); strcat(szPicDir, "\\"); strcat(szPicDir, _PICTUREDIR); m_sPath.Format( "%s",szPicDir ); //FileSearch(m_hMonitor, szPicDir, "*.*", 0); /////////////////////// strcpy(szPicDir, g_strDirectory); strcat(szPicDir, "\\"); strcat(szPicDir, _PICTUREDIR); strcat(szPicDir, "sort.txt"); CStringArray SA,SATemp; if( PathFileExists( szPicDir ) ) { CString sTemp,strTemp1,strTemp2,sTemp2; CStdioFile File; if(!File.Open(szPicDir,CFile::modeRead)) File.Open(szPicDir,CFile::modeCreate|CFile::modeRead); while(File.ReadString(sTemp)) { SA.Add( sTemp ); } File.Close(); } strcpy(szPicDir, g_strDirectory); strcat(szPicDir, "\\"); strcat(szPicDir, _PICTUREDIR); FileSearchCHN( SA,SATemp,0, szPicDir, "*.*", 0); CString sShow,s; for( int i=0;i=0;i-- ) { str1 = SA.GetAt(i); for( int j=0;j注销",dlg.m_sUserID ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_LOGOUT,0,"",(char *)(LPCTSTR)sContent ); } #endif if (g_bRun ) { pDevicesManager->Store(g_strDirectory); pVariantsManager->Store(g_strDirectory); } // 清除所有事件 for(POSITION pos = pEventServer->eventList.GetHeadPosition();pos!=NULL;) { POSITION pos1 = pos ; //要在这里做一个备份 CAlarmEvent* pEvent = pEventServer->eventList.GetNext(pos);//他会改变 pos的值 pEventServer->eventList.RemoveAt(pos1); if( pEvent ) { delete pEvent; pEvent = NULL; } } //if( g_nAlarmModeIsDlg && g_bStartRun ) { if( m_dlgEvent ) delete m_dlgEvent; if( m_dlgControl ) delete m_dlgControl; } if( m_pDlgZuTaiAdd ) { delete m_pDlgZuTaiAdd; m_pDlgZuTaiAdd = NULL ; } int i; for( i = 0; i < MAX_VIEW_NUM; i++ ) { if( m_pViewIDE[ i ] ) { ::SendMessage(m_pViewIDE[ i ]->m_hWnd, WM_CLOSE, 0, 0 ); m_pViewIDE[ i ] = NULL; } } #if USE_NEWTOP if( g_bRun && g_nToolbarRun ) { if( m_pToolBar ) delete m_pToolBar; m_pToolBar = NULL ; } #else if( g_bRun && g_nToolbarRun ) { if( m_wndOfTop ) delete m_wndOfTop; m_wndOfTop = NULL ; } #endif CMDIAutoHideFrame::OnClose(); } else { ShowWindow(SW_HIDE); } } void CMainFrame::OnDestroy() { if( g_nIsPoll == 1 ) { #if VIEW_USE_THREAD if( m_hViewPollThread != NULL ) { MTVERIFY( WaitForSingleObject( m_hViewPollThread, INFINITE ) != WAIT_FAILED ); MTVERIFY( CloseHandle( m_hViewPollThread ) ); m_hViewPollThread = NULL; } #else KillTimer(1); #endif } CMDIAutoHideFrame::OnDestroy(); // TODO: 在此处添加消息处理程序代码 int i; for( i = 0; i < MAX_VIEW_NUM; i++ ) { if( m_pViewIDE[ i ] ) { ::SendMessage(m_pViewIDE[ i ]->m_hWnd, WM_DESTROY, 0, 0 ); m_pViewIDE[ i ] = NULL; } } } BOOL CMainFrame::FindTreeItem(HTREEITEM hSrcItem, HTREEITEM hDestItem) { HTREEITEM hItem = m_wndTree.GetParentItem( hSrcItem ); while( hItem != NULL ) { if( hItem == hDestItem ) return TRUE; hItem = m_wndTree.GetParentItem( hItem ); } return FALSE; } int CMainFrame::ShowDevProperty(HTREEITEM hSelectedItem) { CString strOldUid, strNewUid; int i, j; int nChannelIndex = -1, nDeviceIndex = -1; int nChannelSize = pDevicesManager->m_channels.GetSize(); // 串口设备属性设置 for (i = 0; i < nChannelSize; i++) { if( nChannelIndex != -1 && nDeviceIndex != -1 ) break; int nDeviceSize = pDevicesManager->m_channels[i]->m_Devices.GetSize(); for( j = 0; j < nDeviceSize; j++) { if (m_hSerialDev[i][j]==hSelectedItem ) { nChannelIndex = i; nDeviceIndex = j; break; } if( m_hNetworkDev[j] == hSelectedItem && pDevicesManager->m_channels[i]->m_nCommunicateType == 1 ) { nChannelIndex = i; nDeviceIndex = j; break; } } } if( nChannelIndex == -1 || nDeviceIndex == -1 ) return -1; CChannel* pChannel = pDevicesManager->m_channels[nChannelIndex]; CDevice* pDev = pChannel->m_Devices[nDeviceIndex]; //CSerial* pSerial = (CSerial *)pChannel; CNetwork *pNetwork = (CNetwork *)pChannel; CWizard MyWizard(g_strMywizard,this,1); // 通信方式 m_wndDevice.m_nCommuniteType = pChannel->m_nCommunicateType; // 设备驱动名称 m_wndDevice.m_strDevDriveName = pDev->m_strDevDriveName; // 设备厂家名称 m_wndDevice.m_strDevFactoryName = pDev->m_strDevFactoryName; // 设备型号 m_wndDevice.m_strDevTypeName = pDev->m_strType; // 通信协议(例:Modbus rtu, modbus ascii, modbus tcp) m_wndDevice.m_nProtocolType = pDev->m_nProtocolType; // 配置文件名称 m_wndDevice.m_strIniName = pDev->m_strIniName; // 协议驱动动态库名称 m_wndDevice.m_strProtocolName = pDev->m_strProtocolName; // 是否为采集设备 m_wndDevice.m_nCollectDev = pDev->m_nIsCollectDev; // 是否启用设备 m_wndDevice.m_nDevEnable = (int)pDev->m_bUsed; // CString类型预留 //m_wndDevice.m_strReserved1 = pDev->m_strReserved1; m_wndDevice.m_strReserved2 = pDev->m_strReserved2; m_wndDevice.m_strReserved3 = pDev->m_strReserved3; m_wndDevice.m_strReserved4 = pDev->m_strReserved4; m_wndDevice.m_strReserved5 = pDev->m_strReserved5; // Int类型预留 m_wndDevice.m_nReserved1 = pDev->m_nReserved1; m_wndDevice.m_nReserved2 = pDev->m_nReserved2; m_wndDevice.m_nReserved3 = pDev->m_nReserved3; m_wndDevice.m_nReserved4 = pDev->m_nReserved4; m_wndDevice.m_nReserved5 = pDev->m_nReserved5; // BOOL类型预留 m_wndDevice.m_bReserved1 = pDev->m_bReserved1; m_wndDevice.m_bReserved2 = pDev->m_bReserved2; m_wndDevice.m_bReserved3 = pDev->m_bReserved3; m_wndDevice.m_bReserved4 = pDev->m_bReserved4; m_wndDevice.m_bReserved5 = pDev->m_bReserved5; // 设备UID m_wndComport.m_strUID = pDev->m_strUID; strOldUid = pDev->m_strUID; // 设备名称 m_wndComport.m_strDevName = pDev->m_strName; // 设备所属区域 m_wndComport.m_strDevArea = pDev->m_strReserved1; // 通讯超时 m_wndComport.m_nTimeout = pDev->m_nTimeout; // 设备地址 m_wndComport.m_nDevAddr = (int)pDev->m_Address; // 串行端口 m_wndComport.m_nCommPort = atoi(pChannel->m_strPort.Mid(3)); // 数据位 m_wndComport.m_nDataBit = pChannel->m_nByteSize; // 波特率 m_wndComport.m_nRate = pChannel->m_nBaudRate; // 停止位 m_wndComport.m_nStopBit = pChannel->m_nStopBits; // 校验位 m_wndComport.m_nCheckCode = pChannel->m_nParity; // CString类型预留 m_wndComport.m_strReserved6 = pDev->m_strReserved6; m_wndComport.m_strReserved7 = pDev->m_strReserved7; m_wndComport.m_strReserved8 = pDev->m_strReserved8; m_wndComport.m_strReserved9 = pDev->m_strReserved9; m_wndComport.m_strReserved10 = pDev->m_strReserved10; // Int类型预留 m_wndComport.m_nReserved6 = pDev->m_nReserved6; m_wndComport.m_nReserved7 = pDev->m_nReserved7; m_wndComport.m_nReserved8 = pDev->m_nReserved8; m_wndComport.m_nReserved9 = pDev->m_nReserved9; m_wndComport.m_nReserved10 = pDev->m_nReserved10; // BOOL类型预留 m_wndComport.m_bReserved6 = pDev->m_bReserved6; m_wndComport.m_bReserved7 = pDev->m_bReserved7; m_wndComport.m_bReserved8 = pDev->m_bReserved8; m_wndComport.m_bReserved9 = pDev->m_bReserved9; m_wndComport.m_bReserved10 = pDev->m_bReserved10; if( pChannel->m_nCommunicateType == 1 ) { // 设备IP m_wndComport.m_nNetIP = htonl(inet_addr(pDev->m_strDevIP)); // 通讯端口 m_wndComport.m_nNetPort = pDev->m_nNetPort; } m_wndDevice.m_operation = CDlgDevice::EDIT; MyWizard.AddPage( &m_wndDevice ); MyWizard.AddPage( &m_wndComport ); MyWizard.SetWizardMode(); MyWizard.SetActivePage( &m_wndDevice ); int nTmpChannelIndex = -1, nTmpDeviceIndex = -1; if( MyWizard.DoModal() == ID_WIZFINISH ) { if( !m_wndComport.m_strDevName.Compare("") ) { MessageBox(g_strDevNumCannotBlank, g_strTip, MB_ICONINFORMATION); return -1; } else if( pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName != m_wndComport.m_strDevName ) { if( pDevicesManager->FindDev(m_wndComport.m_strDevName, nTmpChannelIndex, nTmpDeviceIndex) ) { MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION); return -1; } } int nIP = htonl(m_wndComport.m_nNetIP); if( m_wndDevice.m_nCommuniteType == 0 ) { CString strName; strName.Format("COM%d", m_wndComport.m_nCommPort); CString sTemp; sTemp.Format("%s",pDevicesManager->m_channels[nChannelIndex]->m_strName ); //TRACE("串口名称=%s\r\n", pDevicesManager->m_channels[nChannelIndex]->m_strName); if( pDevicesManager->m_channels[nChannelIndex]->m_strName.Compare("") && pDevicesManager->m_channels[nChannelIndex]->m_strName != strName )//以前是串口,现在串口号改变 { int nIndex; nIndex = pDevicesManager->FindCommPort(strName); if( nIndex == -1 )//串口号不存在 { if( FinishedAddDevice(1, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID) == 1 ) { //m_wndTree.DeleteItem( m_hCurrent ); for( j = nDeviceIndex; j < MAX_DEVICE_NUM; j++ ) { m_hSerialDev[nChannelIndex][j] = m_hSerialDev[nChannelIndex][j+1]; } delete pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]; pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex); //InitTreeInfo(); } return 1; } else//串口号存在 { if( pDevicesManager->FindCommPort(strName, m_wndComport.m_nDevAddr, nTmpChannelIndex, nTmpDeviceIndex) ) { MessageBox(g_strSerialPortInUse, g_strTip, MB_ICONINFORMATION); return -1; } if( pDevicesManager->FindDev(strName, nTmpChannelIndex, nTmpDeviceIndex) ) { MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION); return -1; } //nChannelIndex = nIndex; if( FinishedAddDevice(1, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID) == 1 ) { //m_wndTree.DeleteItem( m_hCurrent ); for( j = nDeviceIndex; j < MAX_DEVICE_NUM; j++ ) { m_hSerialDev[nChannelIndex][j] = m_hSerialDev[nChannelIndex][j+1]; } delete pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]; pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex); //DeleteDevInfo((char *)(LPCTSTR)strUid); } return 1; //nDeviceIndex = pDevicesManager->m_channels[nChannelIndex]->m_Devices.GetSize(); } } else//1.以前是串口,现在串口号不变,但设备号改变 2.以前是网络设备,现在改成串口 { if( 0==pDevicesManager->m_channels[nChannelIndex]->m_strName.Compare("") )//2.以前是网络设备,现在改成串口 { if( FinishedAddDevice(1, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID) == 1 ) { //m_wndTree.DeleteItem( m_hCurrent ); for( j = nDeviceIndex; j < MAX_DEVICE_NUM; j++ ) { m_hNetworkDev[j] = m_hNetworkDev[j+1]; } delete pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]; pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex); } return 1; } else { if( pDevicesManager->FindDev(strName, nTmpChannelIndex, nTmpDeviceIndex) )////1.以前是串口,现在串口号不变,但设备号改变 { MessageBox(g_strDevNameInUse, g_strTip, MB_ICONINFORMATION); return -1; } } } } else//网络通信协议 { CString strName; strName.Format("%s", pDevicesManager->m_channels[nChannelIndex]->m_strName);//是網絡的話為空 if( 0==strName.Compare("") )//以前是网络,现在也网络 { if( m_wndComport.m_nNetIP == 0 ) { MessageBox(g_strIPNotBlank, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } if( m_wndComport.m_nNetPort == 0 ) { MessageBox(g_strComcanNot0, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } CString strIP = inet_ntoa(*(struct in_addr *)&nIP); if( (pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex])->m_strDevIP != strIP ) { if( pDevicesManager->FindDev(strIP, m_wndComport.m_nNetPort, nTmpChannelIndex, nTmpDeviceIndex) ) { MessageBox(g_strIPComoccupy, g_strTip, MB_ICONINFORMATION); return -1; } } } else//以前是串口,现在是网络 { if( FinishedAddDevice(1, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID) == 1 ) { //m_wndTree.DeleteItem( m_hCurrent ); for( j = nDeviceIndex; j < MAX_DEVICE_NUM; j++ ) { m_hSerialDev[nChannelIndex][j] = m_hSerialDev[nChannelIndex][j+1]; } delete pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]; pDevicesManager->m_channels[nChannelIndex]->m_Devices.RemoveAt(nDeviceIndex); } return 1; } } // 通信方式 pDevicesManager->m_channels[nChannelIndex]->m_nCommunicateType = m_wndDevice.m_nCommuniteType; // 设备驱动名称 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevDriveName = m_wndDevice.m_strDevDriveName; // 设备厂家名称 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevFactoryName = m_wndDevice.m_strDevFactoryName; // 设备型号 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strType = m_wndDevice.m_strDevTypeName; // 通信协议(例:Modbus rtu, modbus ascii, modbus tcp) pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nProtocolType = m_wndDevice.m_nProtocolType; // 协议驱动动态库名称 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strProtocolName = m_wndDevice.m_strProtocolName; // 是否为采集设备 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nIsCollectDev = m_wndDevice.m_nCollectDev; // 是否启用设备 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bUsed = (BOOL)m_wndDevice.m_nDevEnable; // 设备UID pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strUID = m_wndComport.m_strUID; strNewUid = m_wndComport.m_strUID; // 设备名称 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName = m_wndComport.m_strDevName; // 设备所属区域 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved1 = m_wndComport.m_strDevArea; // 通讯超时 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nTimeout = m_wndComport.m_nTimeout; // 设备地址 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_Address = (BYTE)m_wndComport.m_nDevAddr; //配置文件名称 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strIniName = m_wndDevice.m_strIniName; //预留 //pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved1 = m_wndDevice.m_strReserved1; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved2 = m_wndDevice.m_strReserved2; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved3 = m_wndDevice.m_strReserved3; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved4 = m_wndDevice.m_strReserved4; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved5 = m_wndDevice.m_strReserved5; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved6 = m_wndComport.m_strReserved6; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved7 = m_wndComport.m_strReserved7; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved8 = m_wndComport.m_strReserved8; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved9 = m_wndComport.m_strReserved9; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strReserved10 = m_wndComport.m_strReserved10; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved1 = m_wndDevice.m_nReserved1; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved2 = m_wndDevice.m_nReserved2; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved3 = m_wndDevice.m_nReserved3; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved4 = m_wndDevice.m_nReserved4; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved5 = m_wndDevice.m_nReserved5; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved6 = m_wndComport.m_nReserved6; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved7 = m_wndComport.m_nReserved7; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved8 = m_wndComport.m_nReserved8; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved9 = m_wndComport.m_nReserved9; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nReserved10 = m_wndComport.m_nReserved10; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved1 = m_wndDevice.m_bReserved1; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved2 = m_wndDevice.m_bReserved2; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved3 = m_wndDevice.m_bReserved3; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved4 = m_wndDevice.m_bReserved4; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved5 = m_wndDevice.m_bReserved5; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved6 = m_wndComport.m_bReserved6; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved7 = m_wndComport.m_bReserved7; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved8 = m_wndComport.m_bReserved8; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved9 = m_wndComport.m_bReserved9; pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_bReserved10 = m_wndComport.m_bReserved10; if( m_wndDevice.m_nCommuniteType == 0 ) { pDevicesManager->m_channels[nChannelIndex]->m_strName.Format("COM%d", m_wndComport.m_nCommPort); // 串行端口 pDevicesManager->m_channels[nChannelIndex]->m_strPort.Format("COM%d", m_wndComport.m_nCommPort); // 数据位 pDevicesManager->m_channels[nChannelIndex]->m_nByteSize = m_wndComport.m_nDataBit; // 波特率 pDevicesManager->m_channels[nChannelIndex]->m_nBaudRate = m_wndComport.m_nRate; // 停止位 pDevicesManager->m_channels[nChannelIndex]->m_nStopBits = m_wndComport.m_nStopBit; // 校验位 pDevicesManager->m_channels[nChannelIndex]->m_nParity = m_wndComport.m_nCheckCode; } else if( m_wndDevice.m_nCommuniteType == 1 ) { // 设备IP pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strDevIP = inet_ntoa(*(struct in_addr *)&nIP); // 通讯端口 pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_nNetPort = m_wndComport.m_nNetPort; } CHAR chDevTypeID[MAX_ID + 1] = {0}; // 获取设备类型ID int nRet = CDBInterface::GetInstancePtr()->GetDevTypeID((char *)(LPCTSTR)m_wndDevice.m_strDevTypeName, chDevTypeID); if( -1 == nRet ) { return nRet; } else { CDBInterface::GetInstancePtr()->EditDevInfo( (char *)(LPCTSTR)strOldUid, (char *)(LPCTSTR)strNewUid, m_wndComport.m_nCommPort, m_wndComport.m_nDevAddr, (char *)(LPCTSTR)m_wndComport.m_strDevName, atoi(chDevTypeID), m_wndComport.m_nRate, m_wndComport.m_nDataBit, m_wndComport.m_nStopBit, m_wndComport.m_nCheckCode, 0, inet_ntoa(*(struct in_addr *)&nIP), m_wndComport.m_nNetPort, m_wndComport.m_nCommunicateMode, m_wndDevice.m_nCollectDev, m_wndDevice.m_nProtocolType, m_wndComport.m_nTimeout, m_wndDevice.m_nDevEnable, (char *)(LPCTSTR)m_wndDevice.m_strProtocolName, (char *)(LPCTSTR)m_wndDevice.m_strIniName, (char *)(LPCTSTR)m_wndComport.m_strDevArea, //(char *)(LPCTSTR)m_wndDevice.m_strReserved1, (char *)(LPCTSTR)m_wndDevice.m_strReserved2, (char *)(LPCTSTR)m_wndDevice.m_strReserved3, (char *)(LPCTSTR)m_wndDevice.m_strReserved4, (char *)(LPCTSTR)m_wndDevice.m_strReserved5, (char *)(LPCTSTR)m_wndComport.m_strReserved6, (char *)(LPCTSTR)m_wndComport.m_strReserved7, (char *)(LPCTSTR)m_wndComport.m_strReserved8, (char *)(LPCTSTR)m_wndComport.m_strReserved9, (char *)(LPCTSTR)m_wndComport.m_strReserved10, m_wndDevice.m_nReserved1, m_wndDevice.m_nReserved2, m_wndDevice.m_nReserved3, m_wndDevice.m_nReserved4, m_wndDevice.m_nReserved5, m_wndComport.m_nReserved6, m_wndComport.m_nReserved7, m_wndComport.m_nReserved8, m_wndComport.m_nReserved9, m_wndComport.m_nReserved10, (int)m_wndDevice.m_bReserved1, (int)m_wndDevice.m_bReserved2, (int)m_wndDevice.m_bReserved3, (int)m_wndDevice.m_bReserved4, (int)m_wndDevice.m_bReserved5, (int)m_wndComport.m_bReserved6, (int)m_wndComport.m_bReserved7, (int)m_wndComport.m_bReserved8, (int)m_wndComport.m_bReserved9, (int)m_wndComport.m_bReserved10 ); } CString sContent; sContent.Format("编辑设备< %s >",m_wndComport.m_strDevName.TrimRight() ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_DEV_EDIT,0,"",(char *)(LPCTSTR)sContent ); pDevicesManager->SendNoticeToServer( CMD_NOTICE_READ_DB_DEV,CMD_OPERATE_EDIT,"",m_wndComport.m_strUID,0,"64320" ); } m_wndTree.SetItemText(hSelectedItem, pDevicesManager->m_channels[nChannelIndex]->m_Devices[nDeviceIndex]->m_strName); Invalidate(FALSE); return 0; } bool CMainFrame::ShowView(void) { HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); HTREEITEM hItem; int i; m_hCurrent = hSelectedItem; //如果是视图 char szPicDir[MAX_PATH] = {0}; CString strTempDir = "", strPicFile; strcpy(szPicDir, g_strDirectory); strcat(szPicDir, "\\"); strcat(szPicDir, _PICTUREDIR); hItem = m_wndTree.GetParentItem( hSelectedItem ); while( hItem != NULL ) { if( hItem == m_hMonitor ) { CString strSelect = m_wndTree.GetItemText( hSelectedItem ); if( !strTempDir.Compare("") ) { strPicFile += strSelect; } else { strPicFile += strTempDir; //strPicFile += "\\";//chn modify 12.28 strPicFile += strSelect; } AddIDEView( strSelect, CString(szPicDir) + strPicFile + ".view" ); return true; } else { CString str = m_wndTree.GetItemText( hItem ); strTempDir = str + "\\" + strTempDir; hItem = m_wndTree.GetParentItem( hItem ); } } // 如果是脚本 for (i = 0; i < MAX_SCRIPT_NUM; i++) { if (m_hScriptGroup[i] == hSelectedItem) { CString scriptFile; scriptFile = _SCRIPTDIR; scriptFile = g_strDirectory + CString("\\") + scriptFile + m_wndTree.GetItemText(hSelectedItem) + ".srp"; CString strScript; strScript.Format("%s\\ScriptEdit.exe", g_strDirectory); ShellExecute(NULL,"open", (char *)(LPCTSTR)strScript, scriptFile, NULL, SW_SHOWNORMAL); return true; } } // 报警联动 if (hSelectedItem == m_hActionWithAlarm) { CDlg_ActionWithAlarm dlg; dlg.DoModal(); } // 系统参数 if (hSelectedItem == m_hSystem) { SetRunPara(); } // 变量编辑 else if (m_hAnalog == hSelectedItem) { if( g_nIsDemo == 0 ) { CAnalogDlg dlg; dlg.DoModal(); } } else // 设备属性设置xs { if( g_nIsDemo == 0 ) { int nRet = ShowDevProperty(hSelectedItem); if( nRet == 1 ) { if( hSelectedItem ) { // 这里一删除就报异常,只能先注释,待解决 for Jesse 100106 //m_wndTree.DeleteItem( m_hCurrent );//hSelectedItem } } pDevicesManager->Store(g_strDirectory); } } return true; } BOOL CMainFrame::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { // TODO: 在此添加专用代码和/或调用基类 LPNMHDR pNmhdr = (LPNMHDR)lParam; int i, j; //if( m_bShutdown ) return FALSE; //chn dele int idCtrl = LOWORD(wParam); if( idCtrl == IDD_TREE_LEFT ) // Is my tree's id? { CPoint point; ::GetCursorPos(&point); m_wndTree.ScreenToClient(&point); switch( pNmhdr->code ) { case NM_CLICK: { // Get Click item's UINT uFlags; HTREEITEM hItem = m_wndTree.HitTest(point, &uFlags); if((hItem != NULL) && (TVHT_ONITEM & uFlags)) { m_wndTree.SelectItem(hItem); } return true;//Already process the notify } case NM_RCLICK: { // Get RightClick item's if( g_bStartRun ) return true; UINT uFlags; HTREEITEM hItem = m_wndTree.HitTest(point, &uFlags); m_wndTree.SelectItem(hItem); if((hItem != NULL) && (TVHT_ONITEM & uFlags)) { GetCursorPos(&m_mousePoint); HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); //新建设备 if( hSelectedItem == m_hIOGroup ) { CMenu menu; menu.LoadMenu(IDR_MENU_ADDDEVICE); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); } //删除设备 int nChannelIndex = -1, nDeviceIndex = -1; int nChannelSize = pDevicesManager->m_channels.GetSize(); // 串口设备属性设置 for (i = 0; i < nChannelSize; i++) { #if 0 // 删除COM时有BUG,待解决 for Jesse 091104 if( m_hSerialGroup[i] == hSelectedItem ) { CMenu menu; menu.LoadMenu(IDR_MENU_DELDEVICE); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); return true; } #endif int nDeviceSize = pDevicesManager->m_channels[i]->m_Devices.GetSize(); for( j = 0; j < nDeviceSize; j++) { if (m_hSerialDev[i][j]==hSelectedItem) { CMenu menu; menu.LoadMenu(IDR_MENU_DELDEVICE); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); return true; } if( m_hNetworkDev[j] == hSelectedItem && pDevicesManager->m_channels[i]->m_nCommunicateType == 1 ) { CMenu menu; menu.LoadMenu(IDR_MENU_DELDEVICE); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); return true; } } } //新建或删除监控画面 if (hSelectedItem == m_hMonitor) { CMenu menu; menu.LoadMenu(IDR_MENU_ADDVIEW); menu.GetSubMenu(1)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); } else { if( FindTreeItem( hSelectedItem, m_hMonitor ) ) { CMenu menu; menu.LoadMenu(IDR_MENU_ADDVIEW); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); } } //设定脚本 for (i = 0; i < MAX_SCRIPT_NUM; i++) { if (m_hScriptGroup[i] == hSelectedItem) { CMenu menu; menu.LoadMenu(IDR_MENU_SETSCRIPT); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); } } //新建脚本 if (hSelectedItem == m_hScript) { CMenu menu; menu.LoadMenu(IDR_MENU_ADDSCRIPT); menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,m_mousePoint.x,m_mousePoint.y,this); } } return true;//Already process the notify } case NM_DBLCLK: { ShowView(); return true; } } return false; // no match } return CMDIAutoHideFrame::OnNotify(wParam, lParam, pResult); } int CMainFrame::GetFreeSerialTreeItem() { CString str; #if 1 for( int i = MAX_SERIAL_NUM-1; i >=0 ; i-- ) { //if( m_hSerialGroup[i] == NULL ) break; str = m_wndTree.GetItemText(m_hSerialGroup[i]); if( str.Compare("") ) { return i+1; } } #else for( int i = 0; i < MAX_SERIAL_NUM; i++ ) { //if( m_hSerialGroup[i] == NULL ) break; str = m_wndTree.GetItemText(m_hSerialGroup[i]); if( !str.Compare("") ) { return i; } } #endif return 0; } int CMainFrame::GetNetworkChannelIndex() { int i; int nChannelNo = -1; int nChannelSize = pDevicesManager->m_channels.GetSize(); for (i = 0; i < nChannelSize; i++) { // 网络设备,在m_channels中永远只有一个 if( pDevicesManager->m_channels[i]->m_nCommunicateType == 1 ) { return i; } } return -1; } int CMainFrame::GetFreeNetworkTreeItem() { CString str; for( int i = 0; i < MAX_NETWORK_NUM; i++ ) { //if( m_hNetworkDev[i] == NULL ) break; str = m_wndTree.GetItemText(m_hNetworkDev[i]); if( !str.Compare("") ) { return i; } } return -1; } int CMainFrame::GetIndexSerialTreeItem(CString strSrc) { CString str; for( int i = 0; i < MAX_SERIAL_NUM; i++ ) { //if( m_hSerialGroup[i] == NULL ) break; str = m_wndTree.GetItemText(m_hSerialGroup[i]); if( !str.Compare(strSrc) ) { return i; } } return -1; } int CMainFrame::GetIndexNetworkTreeItem(CString strSrc) { CString str; for( int i = 0; i < MAX_NETWORK_NUM; i++ ) { //if( m_hNetworkDev[i] == NULL ) break; str = m_wndTree.GetItemText(m_hNetworkDev[i]); if( !str.Compare(strSrc) ) { return i; } } return -1; } int CMainFrame::FinishedAddDevice(int nIsDelete, CString strUid) { // 加入该设备的参数 CChannel* pChannel = NULL; CDevice* pDev = new CDevice(); pDev->Create(); int nIP; nIP = htonl(m_wndComport.m_nNetIP); // 通信协议(例:Modbus rtu, Modbus Ascii, Modbus tcp) pDev->m_nProtocolType = m_wndDevice.m_nProtocolType; // 协议动态库名称 pDev->m_strProtocolName = m_wndDevice.m_strProtocolName; // 是否为采集模块 pDev->m_nIsCollectDev = m_wndDevice.m_nCollectDev; // 是否启用设备 pDev->m_bUsed = m_wndDevice.m_nDevEnable; // 设备UID if( nIsDelete == 1 && m_wndDevice.m_sUidOld!=m_wndComport.m_strUID ) pDev->m_strUID = m_wndComport.m_strUID2==""?m_wndComport.m_strUID:m_wndComport.m_strUID2; else pDev->m_strUID = m_wndComport.m_strUID; // 设备名称 pDev->m_strName = m_wndComport.m_strDevName.Trim(); // 设备类型 pDev->m_strType = m_wndDevice.m_strDevTypeName.Trim(); // 设备地址 pDev->m_Address = (BYTE)m_wndComport.m_nDevAddr; // 驱动名称(例:UPS、空调) pDev->m_strDevDriveName = m_wndDevice.m_strDevDriveName; // 设备厂家名称 pDev->m_strDevFactoryName = m_wndDevice.m_strDevFactoryName; // 通讯超时 pDev->m_nTimeout = m_wndComport.m_nTimeout; // 网络设备IP pDev->m_strDevIP = inet_ntoa(*(struct in_addr *)&nIP); // 网络设备通信端口 pDev->m_nNetPort = m_wndComport.m_nNetPort; // 配置文件名称 pDev->m_strIniName = m_wndDevice.m_strIniName; // 预留1 设备所属区域 pDev->m_strReserved1 = m_wndComport.m_strDevArea.Trim(); // 预留2 pDev->m_strReserved2 = m_wndDevice.m_strReserved2; // 预留3 pDev->m_strReserved3 = m_wndDevice.m_strReserved3; // 预留4 pDev->m_strReserved4 = m_wndDevice.m_strReserved4; // 预留5 pDev->m_strReserved5 = m_wndDevice.m_strReserved5; // 预留6 pDev->m_strReserved6 = m_wndComport.m_strReserved6; // 预留7 pDev->m_strReserved7 = m_wndComport.m_strReserved7; // 预留8 pDev->m_strReserved8 = m_wndComport.m_strReserved8; // 预留9 pDev->m_strReserved9 = m_wndComport.m_strReserved9; // 预留10 pDev->m_strReserved10 = m_wndComport.m_strReserved10; // 预留1 pDev->m_nReserved1 = m_wndDevice.m_nReserved1; // 预留2 pDev->m_nReserved2 = m_wndDevice.m_nReserved2; // 预留3 pDev->m_nReserved3 = m_wndDevice.m_nReserved3; // 预留4 pDev->m_nReserved4 = m_wndDevice.m_nReserved4; // 预留5 pDev->m_nReserved5 = m_wndDevice.m_nReserved5; // 预留6 pDev->m_nReserved6 = m_wndComport.m_nReserved6; // 预留7 pDev->m_nReserved7 = m_wndComport.m_nReserved7; // 预留8 pDev->m_nReserved8 = m_wndComport.m_nReserved8; // 预留9 pDev->m_nReserved9 = m_wndComport.m_nReserved9; // 预留10 pDev->m_nReserved10 = m_wndComport.m_nReserved10; // 预留1 pDev->m_bReserved1 = m_wndDevice.m_bReserved1; // 预留2 pDev->m_bReserved2 = m_wndDevice.m_bReserved2; // 预留3 pDev->m_bReserved3 = m_wndDevice.m_bReserved3; // 预留4 pDev->m_bReserved4 = m_wndDevice.m_bReserved4; // 预留5 pDev->m_bReserved5 = m_wndDevice.m_bReserved5; // 预留6 pDev->m_bReserved6 = m_wndComport.m_bReserved6; // 预留7 pDev->m_bReserved7 = m_wndComport.m_bReserved7; // 预留8 pDev->m_bReserved8 = m_wndComport.m_bReserved8; // 预留9 pDev->m_bReserved9 = m_wndComport.m_bReserved9; // 预留10 pDev->m_bReserved10 = m_wndComport.m_bReserved10; CString strCommPort; int nIndex, nFreeIndex; int nChannelSize; int nDeviceSize; CHAR szMaxID[MAX_ID + 1] = {0}; CHAR szDevTypeID[MAX_ID + 1] = {0}; // 获取t_dev_property设备属性表字段ID的最大值 int nRet = CDBInterface::GetInstancePtr()->GetMaxID("t_dev_property", "id", szMaxID); if( -1 == nRet ) { pDev->Destroy(); delete pDev; return -1; } int nID; if( atoi(szMaxID) > 0 ) { nID = atoi(szMaxID) + 1; } else if( atoi(szMaxID) == 0 ) { nID = 1; } // 获取设备类型ID CDBInterface::GetInstancePtr()->GetDevTypeID((char *)(LPCTSTR)m_wndDevice.m_strDevTypeName, szDevTypeID); if( !m_wndComport.m_strDevName.Compare("") ) { MessageBox(g_strDevNumCannotBlank,g_strTip,MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } //检查合法值 if( m_wndDevice.m_operation == CDlgDevice::NEW ) { CHAR szDevName[MAX_DESC + 1] = {0}; CHAR szDevUID[MAX_DESC + 1] = {0}; int nRet = CDBInterface::GetInstancePtr()->GetDevName((char *)(LPCTSTR)m_wndComport.m_strUID, szDevName); if( nRet > 0 ) { MessageBox(g_strDevUidExist,g_strTip,MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } nRet = CDBInterface::GetInstancePtr()->GetDevUID( (char *)(LPCTSTR)m_wndComport.m_strDevName, szDevUID ); if( nRet > 0 ) { MessageBox(g_strDevNameExist,g_strTip,MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } } // 串口设备 if( m_wndComport.m_nCommunicateMode == 0 ) { strCommPort.Format("COM%d", m_wndComport.m_nCommPort); nIndex = GetIndexSerialTreeItem(strCommPort);//得到COM的序列号 if( nIndex == -1 ) { nFreeIndex = GetFreeSerialTreeItem(); CChannel* pComport = new CChannel(); //CSerial* pComport = new CSerial(); // 串行端口 pComport->m_strPort = strCommPort.Trim(); // 串行端口地址 pComport->m_nAddr = m_wndComport.m_nDevAddr; // 波特率 pComport->m_nBaudRate = m_wndComport.m_nRate; // 1200;2400;4800;9600;14400;19200;38400;57600;115200;128000;256000 // 数据位 pComport->m_nByteSize = m_wndComport.m_nDataBit; // 0-1=7,8 // 检验位 pComport->m_nParity = m_wndComport.m_nCheckCode; // 0-4=no,odd,even,mark // 停止位 pComport->m_nStopBits = m_wndComport.m_nStopBit; // 0-2=1,1.5,2 pDevicesManager->m_channels.Add(pComport); nChannelSize = pDevicesManager->m_channels.GetSize(); pChannel = pDevicesManager->m_channels[nChannelSize - 1]; pChannel->m_strName = strCommPort.Trim(); pChannel->m_nCommunicateType = m_wndComport.m_nCommunicateMode; nDeviceSize = pChannel->m_Devices.GetSize(); //if( m_hCurrent ) // m_wndTree.DeleteItem( m_hCurrent ); m_hSerialGroup[nFreeIndex] = m_wndTree.InsertItem(strCommPort, 4, 4, m_hSerial); m_hSerialDev[nFreeIndex][nDeviceSize] = m_wndTree.InsertItem(m_wndComport.m_strDevName, 4, 4, m_hSerialGroup[nFreeIndex]); } else { nChannelSize = pDevicesManager->m_channels.GetSize(); for( int i = 0; i < nChannelSize; i++ ) { CChannel* pCommPort =pDevicesManager->m_channels[i]; //CSerial *pCommPort = (CSerial *)(pDevicesManager->m_channels[i]); if( ( !pCommPort->m_strPort.Compare(strCommPort) ) && pCommPort->m_Devices.GetSize() > 0 ) { nDeviceSize = pCommPort->m_Devices.GetSize(); for( int j = 0; j < nDeviceSize; j++ ) { if( (int)pCommPort->m_Devices[j]->m_Address == m_wndComport.m_nDevAddr ) { MessageBox(g_strSerialPortInUse,g_strTip,MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } } } } for( int i = 0; i < nChannelSize; i++ ) { CChannel* pCommPort = pDevicesManager->m_channels[i]; //CSerial *pCommPort = (CSerial *)(pDevicesManager->m_channels[i]); if( !pCommPort->m_strPort.Compare(strCommPort) ) { nDeviceSize = pCommPort->m_Devices.GetSize(); pChannel = pDevicesManager->m_channels[i]; //nDeviceSize = pChannel->m_Devices.GetSize(); break; } } //pChannel = pDevicesManager->m_channels[nChannelSize - 1]; //nDeviceSize = pChannel->m_Devices.GetSize(); m_hSerialDev[nIndex][nDeviceSize] = m_wndTree.InsertItem(m_wndComport.m_strDevName, 4, 4, m_hSerialGroup[nIndex]); } if( pChannel != NULL ) { pDev->m_pChannel = pChannel; pChannel->m_Devices.Add(pDev); } } // 网络设备 else { int nChannelIndex; // 得到m_channels数组中网络设备的索引,有且只有一个 nIndex = GetIndexNetworkTreeItem( m_wndComport.m_strDevName ); if( nIndex == -1 ) { if( m_wndComport.m_nNetIP == 0 ) { MessageBox(g_strIPNotBlank, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } if( m_wndComport.m_nNetPort == 0 ) { MessageBox(g_strComcanNot0, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } nChannelIndex = GetNetworkChannelIndex(); if( nChannelIndex == -1 ) { CNetwork *pNetwork = new CNetwork(); pNetwork->m_strName = g_strNetDev; pDevicesManager->m_channels.Add(pNetwork); nChannelIndex = pDevicesManager->m_channels.GetSize() - 1; } else { pChannel = pDevicesManager->m_channels[nChannelIndex]; for( int j = 0; j < pChannel->m_Devices.GetSize(); j ++ ) { if( !m_wndDevice.m_bIsStu2000 ) { if( !(pChannel->m_Devices[j]->m_strDevIP.Compare(inet_ntoa(*(struct in_addr *)&nIP))) && (pChannel->m_Devices[j]->m_nNetPort == m_wndComport.m_nNetPort ) ) { MessageBox(g_strIPConflict, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } } else { if( !(pChannel->m_Devices[j]->m_strDevIP.Compare(inet_ntoa(*(struct in_addr *)&nIP))) && (pChannel->m_Devices[j]->m_nNetPort == m_wndComport.m_nNetPort ) && ((int)pChannel->m_Devices[j]->m_Address == m_wndComport.m_nDevAddr ) ) { MessageBox(g_strIPConflict, g_strTip, MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } } } } pChannel = pDevicesManager->m_channels[nChannelIndex]; pChannel->m_nCommunicateType = m_wndComport.m_nCommunicateMode; nDeviceSize = pChannel->m_Devices.GetSize(); nFreeIndex = GetFreeNetworkTreeItem(); m_hNetworkDev[nFreeIndex] = m_wndTree.InsertItem( m_wndComport.m_strDevName, 2, 2, m_hEtherNet); pDev->m_pChannel = pChannel; pChannel->m_Devices.Add(pDev); } else { MessageBox(g_strDevNameExist,g_strTip,MB_ICONWARNING); pDev->Destroy(); delete pDev; return 0; } } if( nIsDelete == 1 ) { //删除数据库数据 CDBInterface::GetInstancePtr()->DeleteDevInfo((char *)(LPCTSTR)strUid); } // 插入设备信息 CDBInterface::GetInstancePtr()->InsertDevInfo( nID, (char *)(LPCTSTR)pDev->m_strUID, m_wndComport.m_nCommPort, m_wndComport.m_nDevAddr, (char *)(LPCTSTR)m_wndComport.m_strDevName, atoi(szDevTypeID), m_wndComport.m_nRate, m_wndComport.m_nDataBit, m_wndComport.m_nStopBit, m_wndComport.m_nCheckCode, 0, inet_ntoa( *(struct in_addr *)&nIP ), m_wndComport.m_nNetPort, m_wndComport.m_nCommunicateMode, m_wndDevice.m_nCollectDev, m_wndDevice.m_nProtocolType, m_wndComport.m_nTimeout, m_wndDevice.m_nDevEnable, (char *)(LPCTSTR)m_wndDevice.m_strProtocolName, (char *)(LPCTSTR)m_wndDevice.m_strIniName, (char *)(LPCTSTR)pDev->m_strReserved1, //(char *)(LPCTSTR)m_wndDevice.m_strReserved1, (char *)(LPCTSTR)m_wndDevice.m_strReserved2, (char *)(LPCTSTR)m_wndDevice.m_strReserved3, (char *)(LPCTSTR)m_wndDevice.m_strReserved4, (char *)(LPCTSTR)m_wndDevice.m_strReserved5, (char *)(LPCTSTR)m_wndComport.m_strReserved6, (char *)(LPCTSTR)m_wndComport.m_strReserved7, (char *)(LPCTSTR)m_wndComport.m_strReserved8, (char *)(LPCTSTR)m_wndComport.m_strReserved9, (char *)(LPCTSTR)m_wndComport.m_strReserved10, m_wndDevice.m_nReserved1, m_wndDevice.m_nReserved2, m_wndDevice.m_nReserved3, m_wndDevice.m_nReserved4, m_wndDevice.m_nReserved5, m_wndComport.m_nReserved6, m_wndComport.m_nReserved7, m_wndComport.m_nReserved8, m_wndComport.m_nReserved9, m_wndComport.m_nReserved10, (int)m_wndDevice.m_bReserved1, (int)m_wndDevice.m_bReserved2, (int)m_wndDevice.m_bReserved3, (int)m_wndDevice.m_bReserved4, (int)m_wndDevice.m_bReserved5, (int)m_wndComport.m_bReserved6, (int)m_wndComport.m_bReserved7, (int)m_wndComport.m_bReserved8, (int)m_wndComport.m_bReserved9, (int)m_wndComport.m_bReserved10 ); return 1; } void CMainFrame::AddDevice() { CWizard MyWizard(g_strMywizard,this,1); MyWizard.AddPage( &m_wndDevice ); MyWizard.AddPage( &m_wndComport ); MyWizard.SetWizardMode(); MyWizard.SetActivePage( &m_wndDevice ); m_wndDevice.m_operation = CDlgDevice::NEW; void* pType = NULL; if( MyWizard.DoModal() == ID_WIZFINISH ) { int nRet = FinishedAddDevice(0, ""); if( -1!=nRet && 0!=nRet ) { CString sContent; sContent.Format("%s %s< %s >",g_strAdd,g_strDevice1,m_wndComport.m_strDevName ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_DEV_ADD,0,"",(char *)(LPCTSTR)sContent ); pDevicesManager->SendNoticeToServer( CMD_NOTICE_READ_DB_DEV,CMD_OPERATE_ADD,"",m_wndComport.m_strUID,0,"64320" ); MyWizard.RemovePage( &m_wndDevice ); MyWizard.RemovePage( &m_wndComport ); } if( 0==nRet ) { MyWizard.RemovePage( &m_wndDevice ); MyWizard.RemovePage( &m_wndComport ); AddDevice(); } } } void CMainFrame::OnAdddevoce() { // TODO: 在此添加命令处理程序代码 AddDevice(); } void CMainFrame::OnUpdateAdddevoce(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnZuTaiAdd() { if( !m_pDlgZuTaiAdd->m_bIsExistExcel ) { MessageBox( "没有安装Excel软件,组态功能不能用!","提示" ); return; } CDlg_Pwd Dlg_Pwd; Dlg_Pwd.m_nShowType = 2; if( Dlg_Pwd.DoModal()!=IDOK ) return; m_pDlgZuTaiAdd->ReadResource(); m_pDlgZuTaiAdd->ShowWindow( SW_SHOW ); } void CMainFrame::OnUpdateZuTaiAdd(CCmdUI *pCmdUI) { } void CMainFrame::OnDeleteport() { // TODO: 在此添加命令处理程序代码 } void CMainFrame::OnUpdateDeleteport(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnAddPort() { // TODO: 在此添加命令处理程序代码 } void CMainFrame::OnUpdateAddPort(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnAddScript() { // TODO: 在此添加命令处理程序代码 CScriptSetDlg dlg; if (dlg.DoModal() == IDOK) { m_hScriptGroup[m_nScripts++] = m_wndTree.InsertItem(dlg.m_strName,1,1,m_hScript); CString strFileName = dlg.m_strName; strFileName = CString(g_strDirectory) + "\\" + _SCRIPTDIR + strFileName; strFileName = strFileName + ".srp"; CFile fileSpt; if (fileSpt.Open(strFileName, CFile::modeCreate)) // | CFile::modeWrite { fileSpt.Close(); } strFileName.Replace(".srp", ".con"); if ( dlg.m_bUsed ) { WritePrivateProfileString("RUNPARA", "USE", "1", strFileName); } else { WritePrivateProfileString("RUNPARA", "USE", "0", strFileName); } WritePrivateProfileString("RUNPARA", "CONDITON", dlg.m_strCondition, strFileName); char tmp[10]; sprintf(tmp, "%d", dlg.m_nType); WritePrivateProfileString("RUNPARA", "TYPE", tmp, strFileName); sprintf(tmp, "%d", dlg.m_nCircle); WritePrivateProfileString("RUNPARA", "CIRCLE", tmp, strFileName); } } void CMainFrame::OnUpdateAddScript(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::HideRunBar() { //m_wndRunToolBar.ShowWindow(SW_HIDE); } void CMainFrame::OnAddview() { // TODO: 在此添加命令处理程序代码 CViewNameDlg dlg; if (dlg.DoModal() == IDOK) { if( dlg.m_strViewName.Compare("")==0 ) { MessageBox(g_strMonitorNameIsBlank, g_strTip, MB_ICONINFORMATION); return; } char szPicDir[MAX_PATH] = {0}; CString strTempDir = ""; strcpy(szPicDir, g_strDirectory); strcat(szPicDir, "\\"); strcat(szPicDir, _PICTUREDIR); int cx=GetSystemMetrics(SM_CXSCREEN)-10; int cy=GetSystemMetrics(SM_CYSCREEN)-100; CGraph* pic=new CGraph(CSize(cx, cy)); pic->m_strPicFile = CString(szPicDir); HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); HTREEITEM hItem; m_wndTree.InsertItem(dlg.m_strViewName, 1, 1, hSelectedItem); if( hSelectedItem == m_hMonitor ) { pic->m_strPicFile = pic->m_strPicFile + dlg.m_strViewName + ".view"; pic->Store(); } else { hItem = m_wndTree.GetParentItem( hSelectedItem ); while( hItem != NULL ) { if( hItem == m_hMonitor ) { CString strSelect = m_wndTree.GetItemText( hSelectedItem ); if( !strTempDir.Compare("") ) { pic->m_strPicFile += strSelect; } else { pic->m_strPicFile += strTempDir; pic->m_strPicFile += "\\"; pic->m_strPicFile += strSelect; } if( !PathFileExists(pic->m_strPicFile) ) { SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = 0; int nRet = CreateDirectory(pic->m_strPicFile, &sa); if( !nRet ) { MessageBox(g_strCannotCreateDirecitory,g_strTip,MB_ICONWARNING); delete pic; return; } } pic->m_strPicFile = pic->m_strPicFile + "\\" + dlg.m_strViewName + ".view"; pic->Store(); delete pic; return; } else { CString str = m_wndTree.GetItemText( hItem ); strTempDir = str + "\\" + strTempDir; hItem = m_wndTree.GetParentItem( hItem ); } } } delete pic; CString sContent; sContent.Format("添加画面< %s >",dlg.m_strViewName.TrimRight() ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_MONITOR_ADD,0,"",(char *)(LPCTSTR)sContent ); } } void CMainFrame::OnAddview2() { OnAddview(); } void CMainFrame::OnUpdateAddview(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnEditSort() { CDlg_EditView dlg; dlg.DoModal(); } void CMainFrame::OnUpdateEditSort(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnUpdateAddview2(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::DeleteDev(int nIsHint) { int i, j; CString strMessage, strSelect; HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); strSelect = m_wndTree.GetItemText( hSelectedItem ); int nChannelNo = -1, nDeviceNo = -1; int nChannelSize = pDevicesManager->m_channels.GetSize(); // 串口设备属性设置 for (i = 0; i < nChannelSize; i++) { if( nChannelNo != -1 && nDeviceNo != -1 ) break; int nDeviceSize = pDevicesManager->m_channels[i]->m_Devices.GetSize(); for( j = 0; j < nDeviceSize; j++) { if (m_hSerialDev[i][j]==hSelectedItem && pDevicesManager->m_channels[i]->m_nCommunicateType == 0 ) { nChannelNo = i; nDeviceNo = j; break; } if( m_hNetworkDev[j] == hSelectedItem && pDevicesManager->m_channels[i]->m_nCommunicateType == 1 ) { nChannelNo = i; nDeviceNo = j; break; } } } CChannel* pChannel = pDevicesManager->m_channels[nChannelNo]; CDevice* pDev = pChannel->m_Devices[nDeviceNo]; if( nIsHint ) { strMessage.Format(g_strDelDev,pDev->m_strName,pDev->m_strName); int nRet = MessageBox(strMessage,g_strConfirm,MB_YESNOCANCEL|MB_ICONQUESTION); if( nRet==IDCANCEL) return; else if( nRet==IDYES ) { CString sContent; sContent.Format("%s %s< %s >",g_strAdd,g_strDevice1,strSelect ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_DEV_DELETE,0,"",(char *)(LPCTSTR)sContent ); pDevicesManager->SendNoticeToServer( CMD_NOTICE_READ_DB_DEV,CMD_OPERATE_DELETE,"",(char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID,0,"64320" ); CDBInterface::GetInstancePtr()->DelTableData( "t_dev_variant_item","uid",(char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID,1 ); CDBInterface::GetInstancePtr()->DelTableData( "t_dev_variant","uid",(char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID,1 ); CDBInterface::GetInstancePtr()->DelTableData( "t_var_status","devuid",(char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID,1 ); } else { CString sContent; sContent.Format("%s %s< %s >",g_strAdd,g_strDevice1,strSelect ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_DEV_DELETE,0,"",(char *)(LPCTSTR)sContent ); } } m_wndTree.DeleteItem(hSelectedItem); if( pChannel->m_nCommunicateType == 0 ) { for( j = nDeviceNo; j < MAX_DEVICE_NUM; j++ ) { m_hSerialDev[nChannelNo][j] = m_hSerialDev[nChannelNo][j+1]; } } else if( pChannel->m_nCommunicateType = 1 ) { for( j = nDeviceNo; j < MAX_DEVICE_NUM; j++ ) { m_hNetworkDev[j] = m_hNetworkDev[j+1]; } } //在设备与组的关系表中把相关的设备信息删掉 CDBInterface::GetInstancePtr()->DelTableData( "t_role_equip","uid",(char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID,1 ); CDBInterface::GetInstancePtr()->DeleteDevInfo( (char *)(LPCTSTR)pChannel->m_Devices[nDeviceNo]->m_strUID ); delete pChannel->m_Devices[nDeviceNo]; pChannel->m_Devices.RemoveAt(nDeviceNo); } void CMainFrame::OnDeletedevice() { // TODO: 在此添加命令处理程序代码 DeleteDev(1); } void CMainFrame::OnUpdateDeletedevice(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 pCmdUI->Enable(TRUE); } void CMainFrame::OnDeleteview() { // TODO: 在此添加命令处理程序代码 //删除文件,同时再数状控件中删除 CString strPath, strTemp; CString strPathFile,strPathFolder; HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); if( m_hMonitor==hSelectedItem ) { MessageBox(g_strMonitorNameCannotDel, g_strTip, MB_ICONINFORMATION); return; } CString strSelect = m_wndTree.GetItemText( hSelectedItem ); CString strMessage; strMessage.Format(g_strDelView,strSelect); if (MessageBox(strMessage,g_strConfirm,MB_YESNO|MB_ICONQUESTION) == IDNO) return; GetPicPathByTree( hSelectedItem,strTemp ); strPathFile.Format( "%s\\%s%s.view",g_strDirectory,CString(_PICTUREDIR),strTemp.Left( strTemp.GetLength()-1) ); strPathFolder.Format( "%s\\%s%s\0\0",g_strDirectory,CString(_PICTUREDIR),strTemp.Left( strTemp.GetLength()-1) ); if( PathFileExists( strPathFile ) ) { DeleteFile( strPathFile ); m_wndTree.DeleteItem(hSelectedItem); hSelectedItem = NULL; } if( PathFileExists( strPathFolder ) ) { //strPathFolder += "\0\0"; DeleteDirectory( strPathFolder ); //_DeleteFile( strPathFolder,FOF_ALLOWUNDO|FOF_NOCONFIRMATION ); if( hSelectedItem ) m_wndTree.DeleteItem(hSelectedItem); } CString sContent; sContent.Format("删除画面< %s >",strSelect.TrimRight() ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_MONITOR_DELETE,0,"",(char *)(LPCTSTR)sContent ); return; //strPath = g_strDirectory + CString("\\") + CString(_PICTUREDIR); //ffsco o; //o.dirs(1); //查找子目录 //o.find( LPCSTR(strPath), "*.view" ); //ffsco::typeT coo; //ffsco::typeT::iterator it; //HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); //if( m_hMonitor==hSelectedItem ) //{ // MessageBox(g_strMonitorNameCannotDel, g_strTip, MB_ICONINFORMATION); // return; //} //CString strSelect = m_wndTree.GetItemText( hSelectedItem ); //CString strMessage; //strMessage.Format(g_strDelView,strSelect); //if (MessageBox(strMessage,g_strConfirm,MB_YESNO|MB_ICONQUESTION) == IDNO) // return; ////文件 //coo = o.co_file(); //for (it = coo.begin(); coo.end() != it; it++) //{ // strTemp = (*it).c_str(); // strPath = strTemp; // strTemp = strTemp.Right( strTemp.GetLength() - strTemp.ReverseFind('\\') - 1 ); // if( !strTemp.Compare(strSelect + ".view") ) // { // CFile::Remove( strPath ); // m_wndTree.DeleteItem(hSelectedItem); // break; // } //} ////目录 //coo = o.co_dir(); //for( it = coo.begin(); coo.end() != it; it++ ) //{ // strTemp = (*it).c_str(); // strPath = strTemp; // int nFind = strTemp.ReverseFind('\\'); // strTemp = strTemp.Left( nFind ); // strTemp = strTemp.Right( strTemp.GetLength() - strTemp.ReverseFind('\\') - 1 ); // if( !strTemp.Compare(strSelect) ) // { // DeleteDirectory( strPath ); // m_wndTree.DeleteItem(hSelectedItem); // break; // } //} //CString sContent; //sContent.Format("删除画面< %s >",strSelect.TrimRight() ); //CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_MONITOR_DELETE,0,"",(char *)(LPCTSTR)sContent ); } void CMainFrame::OnUpdateDeleteview(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnModifyViewName() { // TODO: 在此添加命令处理程序代码 CString strNew, strTemp,sViewName; CString strPathFile,strPathFolder; HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); if( m_hMonitor==hSelectedItem ) { return; } CString strSelect = m_wndTree.GetItemText( hSelectedItem ); CViewNameDlg dlg; dlg.m_strViewName = strSelect; if (dlg.DoModal() != IDOK) return; GetPicPathByTree( hSelectedItem,strTemp ); strPathFile.Format( "%s\\%s%s.view",g_strDirectory,CString(_PICTUREDIR),strTemp.Left( strTemp.GetLength()-1) ); strPathFolder.Format( "%s\\%s%s\0\0",g_strDirectory,CString(_PICTUREDIR),strTemp.Left( strTemp.GetLength()-1) ); if( PathFileExists( strPathFile ) ) { strTemp = strSelect + ".view"; sViewName = dlg.m_strViewName + ".view"; strNew = strPathFile; strNew.Replace( strTemp,sViewName ); MoveFile( strPathFile,strNew ); m_wndTree.SetItemText( hSelectedItem,dlg.m_strViewName ); hSelectedItem = NULL; } if( PathFileExists( strPathFolder ) ) { strTemp = "\\" + strSelect; sViewName = "\\" + dlg.m_strViewName; strNew = strPathFolder; strNew.Replace( strTemp,sViewName ); CopyDirectory( strPathFolder,strNew ); DeleteDirectory( strPathFolder ); if( hSelectedItem ) m_wndTree.DeleteItem(hSelectedItem); } } void CMainFrame::OnUpdateModifyViewName(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnDeletescript() { // TODO: 在此添加命令处理程序代码 HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); CFile::Remove( _SCRIPTDIR + m_wndTree.GetItemText(hSelectedItem) + ".srp"); CFile::Remove( _SCRIPTDIR + m_wndTree.GetItemText(hSelectedItem) + ".con"); m_wndTree.DeleteItem(hSelectedItem); int nPos = -1; for(int i = 0; i < m_nScripts; i++) { if (hSelectedItem == m_hScriptGroup[i]) { nPos = i; } } for( i = nPos; i < m_nScripts; i++) { m_hScriptGroup[i] = m_hScriptGroup[i+1]; } } void CMainFrame::OnUpdateDeletescript(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnSetscript() { // TODO: 在此添加命令处理程序代码 HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); for (int m = 0; m < 32; m++) { if (m_hScriptGroup[m] == hSelectedItem) { CString conFile; //SetCurrentDirectory(g_CurrentDir); conFile = CString(g_strDirectory) + "\\" + _SCRIPTDIR; conFile = conFile + m_wndTree.GetItemText(hSelectedItem) + ".con"; CScriptSetDlg dlg; dlg.m_nCircle = GetPrivateProfileInt("RUNPARA", "CIRCLE", -1, conFile); dlg.m_nType = GetPrivateProfileInt("RUNPARA", "TYPE", -1, conFile); dlg.m_bUsed = GetPrivateProfileInt("RUNPARA", "USE", -1, conFile); char szCon[MAX_PATH] = {0}; GetPrivateProfileString("RUNPARA", "CONDITON", "", szCon, MAX_PATH, conFile); dlg.m_strCondition = szCon; dlg.m_strName = m_wndTree.GetItemText(hSelectedItem); if (dlg.DoModal() == IDOK) { WritePrivateProfileString("RUNPARA", "CONDITON", dlg.m_strCondition, conFile); char tmp[10]; sprintf(tmp, "%d", dlg.m_nType); WritePrivateProfileString("RUNPARA", "TYPE", tmp, conFile); sprintf(tmp, "%d", dlg.m_nCircle); WritePrivateProfileString("RUNPARA", "CIRCLE", tmp, conFile); if ( dlg.m_bUsed ) { WritePrivateProfileString("RUNPARA", "USE", "1", conFile); } else { WritePrivateProfileString("RUNPARA", "USE", "0", conFile); } } } } } void CMainFrame::OnUpdateSetscript(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::OnEditscript() { // TODO: 在此添加命令处理程序代码 HTREEITEM hSelectedItem = m_wndTree.GetSelectedItem(); for (int m = 0; m < 32; m++) { if (m_hScriptGroup[m] == hSelectedItem) { CString scriptFile; scriptFile = CString(g_strDirectory) + "\\" + _SCRIPTDIR; scriptFile = scriptFile + m_wndTree.GetItemText(hSelectedItem) + ".srp"; ShellExecute(NULL,"open", "ScriptEdit.exe", scriptFile, NULL, SW_SHOWNORMAL); } } } void CMainFrame::OnUpdateEditscript(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 } void CMainFrame::SetRunPara() { OnSysPara(); } int CMainFrame::GetIDEViewIndex(CString strPath) { int i; for( i = 0; i < MAX_VIEW_NUM; i++ ) { if( !m_pViewIDE[i] ) continue; CString str; str = m_pViewIDE[i]->m_strPath; str.Replace("\\\\", "\\"); strPath.Replace("\\\\", "\\"); if( !str.Compare(strPath) ) { return i; } } return -1; } int CMainFrame::GetIDEViewFreeIndex(CString strPath) { int i; for( i = 0; i < MAX_VIEW_NUM; i++ ) { if( !m_pViewIDE[i] ) return i; if( m_pViewIDE[i]->m_bClose ) continue; if( !m_pViewIDE[i]->m_strPath.Compare("") ) { return i; } } return -1; } void CMainFrame::AddIDEView(CString strDesc, CString strPath) { //如果是当前画面,退出 if( g_strViewName==strPath ) return; g_sCurrentPageName = strDesc; // 打开新的画面,先保存旧的。 CIDEView *pView = (CIDEView *)m_pActiveView; if( pView ) { pView->ChangeView(); } int nIndex = GetIDEViewIndex(strPath); if( nIndex == -1 ) { nIndex = GetIDEViewFreeIndex(strPath); if( nIndex == -1 ) nIndex = 0; CCreateContext context; m_pViewIDE[nIndex] = new CChildFrame; m_pViewIDE[nIndex]->m_strPath = strPath; m_pViewIDE[nIndex]->m_strDesc = strDesc; context.m_pCurrentDoc = m_pDoc; context.m_pNewDocTemplate = m_pDoc->GetDocTemplate(); context.m_pNewViewClass = RUNTIME_CLASS( CIDEView ); context.m_pCurrentFrame = this; context.m_pLastView = NULL; if( !m_pViewIDE[nIndex]->LoadFrame(IDI_SUMMARY, WS_MAXIMIZE|WS_OVERLAPPEDWINDOW, this, &context) ) { return; } m_pViewIDE[nIndex]->ShowWindow(SW_SHOWMAXIMIZED); m_pViewIDE[nIndex]->InitialUpdateFrame(m_pDoc,true); m_pViewIDE[nIndex]->MDIActivate(); m_nViewCount++; } else { m_pActiveView = (CFormView *)m_pViewIDE[nIndex]->GetActiveView(); m_pViewIDE[nIndex]->MDIActivate(); } m_pViewIDE[ nIndex ]->m_bClose = FALSE; m_pActiveView = (CFormView *)m_pViewIDE[nIndex]->GetActiveView(); g_strViewName = strPath; ((CIDEView *)m_pActiveView)->ChangeView(); //取当前所有的变量到SA中 GetCurPicVarToSArray( strPath ); /////////////////////把当前画面名保存到C:\\PageName.txt中,给视频用/////////////////////////////////// CString sPath = "C:\\PageName.txt"; DeleteFile( sPath ); CString strTemp; CStdioFile MyFile; if(!MyFile.Open(sPath,CFile::modeWrite)) MyFile.Open(sPath,CFile::modeCreate|CFile::modeWrite); strTemp.Format("%s\n",strDesc); MyFile.SeekToEnd(); MyFile.WriteString(strTemp); MyFile.Close(); } void CMainFrame::OnUsers() { if( g_nIsDemo == 0 ) { CDlgUserManager dlg; if( dlg.DoModal() == IDOK ) { } } } void CMainFrame::OnEditPwdTool() { if( g_nIsDemo == 0 ) { CDlgEditPwd dlg; if( dlg.DoModal() == IDOK ) { CString sContent; sContent.Format("%s%s",g_strEdit,g_strPwd ); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_PWD_EDIT,0,"",(char *)(LPCTSTR)sContent ); } } } void CMainFrame::OnSysPara() { CSystemParaSetDlg dlg; dlg.m_bStartRun = g_bStartRun; dlg.m_bAlarmVoice = g_bAlarmVoice; dlg.m_bEventAlarm = g_bEventAlarm; dlg.m_bHideTask = g_bHideTask; dlg.m_strStartPic = g_strStartPic; dlg.m_strStartPath = g_strStartPath; if ( dlg.DoModal() == IDOK ) { #if 0 //程序退出之前不改变状态 g_bStartRun = dlg.m_bStartRun; #endif //int nPos = dlg.m_strStartPath.Find("\\\\"); //if( nPos!=-1 ) //{ // dlg.m_strStartPath.Delete( nPos ); //} // //int nLen = dlg.m_strStartPath.GetLength(); //nPos = dlg.m_strStartPath.Find("view"); //CString sTemp; //if( nPosm_bDigitalAlarm = g_bYxChangeEve; pVariantsManager->m_bAnalogAlarm = g_bYcEvent; } #endif } void CMainFrame::OnEvent() { if( g_nIsDemo == 0 ) { CDlgQueryWarningRec dlg; if( dlg.DoModal() == IDOK ) { } } } void CMainFrame::OnSystemLog() { if( g_nIsDemo == 0 ) { CDlgSystemLog dlg; dlg.DoModal(); } } void CMainFrame::OnNoticeRec() { if( g_nIsDemo == 0 ) { CDlgNoticeRec dlg; dlg.DoModal(); } } void CMainFrame::OnUpdateEvent(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bEvent); } void CMainFrame::OnUpdateSystemLog(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bSystemLog); } void CMainFrame::OnUpdateNoticeRec(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bNoticeRec); } void CMainFrame::OnUpdateUsers(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bUsers); } void CMainFrame::OnUpdateEditPwd(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bEditPwd); } void CMainFrame::OnUpdateSysPare(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bSysPare); } void CMainFrame::OnUpdateSingleAnalog(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bAnalog); } void CMainFrame::OnUpdatePrint(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bPrint); } void CMainFrame::OnSummaryLog() { if( g_nIsDemo == 0 ) { #if 0 CDlgQuerySummaryLog dlg; if( dlg.DoModal() == IDOK ) { } #endif CString sIDE,sReport; sIDE.Format( "%s",g_strDirectory ); int nEnd = 0; for (int i = sIDE.GetLength()-1; i >= 0; i--) { if (g_strDirectory[i] == '\\') { nEnd = i; break; } } sReport = sIDE.Left( nEnd ) + "\\report"; CString strFileName; strFileName.Format("%s\\DBMonitorReport.exe", sReport); ShellExecute(0, "open", strFileName, NULL, NULL, SW_SHOWNORMAL); } } void CMainFrame::OnUpdateSummaryLog(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bDeviceLog); } void CMainFrame::StoreRunPara(BOOL bStartRun) { char Path[_MAX_PATH] = {0}; strcat(Path, g_strDirectory); strcat(Path,"\\"); strcat(Path, _PROJECTDIR); strcat(Path,"\\"); strcat(Path, "runpara.ini"); if ( bStartRun ) { WritePrivateProfileString("RUNPARA", "STARTRUN", "1", Path); } else { WritePrivateProfileString("RUNPARA", "STARTRUN", "0", Path); } if ( g_bEventAlarm ) { WritePrivateProfileString("RUNPARA", "ALARM", "1", Path); } else { WritePrivateProfileString("RUNPARA", "ALARM", "0", Path); } if ( g_bAlarmVoice ) { WritePrivateProfileString("RUNPARA", "VOICE", "1", Path); } else { WritePrivateProfileString("RUNPARA", "VOICE", "0", Path); } if ( g_bHideTask ) { WritePrivateProfileString("RUNPARA", "HIDETASK", "1", Path); } else { WritePrivateProfileString("RUNPARA", "HIDETASK", "0", Path); } if ( g_bFullScreen ) { WritePrivateProfileString("RUNPARA", "FULLSCREEN", "1", Path); } else { WritePrivateProfileString("RUNPARA", "FULLSCREEN", "0", Path); } WritePrivateProfileString("RUNPARA", "STARTPIC", g_strStartPic, Path); WritePrivateProfileString("RUNPARA", "STARTPATH", g_strStartPath, Path); } // 存储事件参数 void CMainFrame::StoreEventPara() { char Path[_MAX_PATH] = {0}; strcat(Path, g_strDirectory); strcat(Path,"\\"); strcat(Path, _PROJECTDIR); strcat(Path,"\\"); strcat(Path, "event.ini"); if ( g_bControlEvent ) { WritePrivateProfileString("IFALARM", "CONTROL", "1", Path); } else { WritePrivateProfileString("IFALARM", "CONTROL", "0", Path); } if ( g_bLoginEvent ) { WritePrivateProfileString("IFALARM", "LOGIN", "1", Path); } else { WritePrivateProfileString("IFALARM", "LOGIN", "0", Path); } if ( g_bSetEvent ) { WritePrivateProfileString("IFALARM", "SET", "1", Path); } else { WritePrivateProfileString("IFALARM", "SET", "0", Path); } if ( g_bReguEvent ) { WritePrivateProfileString("IFALARM", "REGU", "1", Path); } else { WritePrivateProfileString("IFALARM", "REGU", "0", Path); } if ( g_bYxChangeEve ) { WritePrivateProfileString("IFALARM", "YXCHANGE", "1", Path); } else { WritePrivateProfileString("IFALARM", "YXCHANGE", "0", Path); } if ( g_bYcEvent ) { WritePrivateProfileString("IFALARM", "YCOVERLIMIT", "1", Path); } else { WritePrivateProfileString("IFALARM", "YCOVERLIMIT", "0", Path); } WritePrivateProfileString("WAVEFILE", "CONTROL", g_strYkWave, Path); WritePrivateProfileString("WAVEFILE", "LOGIN", g_strLoginWave, Path); WritePrivateProfileString("WAVEFILE", "SET", g_strSetWave, Path); WritePrivateProfileString("WAVEFILE", "REGU", g_strReguWave, Path); WritePrivateProfileString("WAVEFILE", "YXCHANGE", g_strYxChangeWave, Path); WritePrivateProfileString("WAVEFILE", "YCOVERLIMIT", g_strYcWave, Path); } void CMainFrame::OnControldialog() { CRect rctDlg; int screenx = GetSystemMetrics(SM_CXSCREEN); int screeny = GetSystemMetrics(SM_CYSCREEN); m_dlgControl->GetWindowRect(&rctDlg); m_dlgControl->SetWindowPos(&wndTop, screenx - rctDlg.Width(), screeny - rctDlg.Height(), rctDlg.Width(), rctDlg.Height(), SWP_NOZORDER); m_dlgControl->ShowWindow(SW_SHOW); } void CMainFrame::OnTimer(UINT nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if( nIDEvent == 1 ) { if (g_bStartRun && g_nIsPoll == 1) { for( int i = 0; i < g_nPollCount; i++ ) { if( g_dwTick == 0 ) { if( g_nPollIndex == i ) { g_dwTick = GetTickCount(); TRACE("Enter AddIDEView %s, %s\r\n", g_strPollPath, g_strPollDesc); AddIDEView(g_strPollDesc[i], g_strPollPath[i]); TRACE("Leave AddIDEView\r\n"); } } else if( GetTickCount() - g_dwTick > (DWORD)g_nPollInterval * 1000 ) { if( g_nPollIndex == g_nPollCount - 1 ) { g_nPollIndex = 0; } else { g_nPollIndex++; } g_dwTick = 0; } } } } if( nIDEvent==2 )//定时得到狗信息/定时判断是否过期 { //pDevicesManager->GetDogInfo( "64320" ); if( pDevicesManager->m_bIsPastDue ) { pDevicesManager->m_bIsPastDue = false; static bool bShow=false; if( !bShow ) { bShow = true; CString sShow; sShow.Format(g_strPastDue,pDevicesManager->m_sPassDueInfo ); if( MessageBox( sShow, g_strTip, MB_ICONWARNING)==IDOK ) bShow = false; } } if( !pDevicesManager->m_bIsBlanceSmall )//余额不足 { pDevicesManager->m_bIsBlanceSmall = true; CString sShow; sShow.Format("%s",pDevicesManager->m_sBanceContent ); MessageBox( sShow, g_strTip, MB_ICONWARNING); } } //if( nIDEvent==3 )//判断变量在这个时间段时否报警 //{ // static int nStaticHours = -1; // CTime time = CTime::GetCurrentTime(); // int nHours = time.GetHour(); // if( nStaticHours!=nHours ) // { // nStaticHours = nHours; // pVariantsManager->AllocDatePlan(); // } //} CMDIAutoHideFrame::OnTimer(nIDEvent); } void CMainFrame::OnUserManager() { // TODO: 在此添加命令处理程序代码 CDlgUserManager dlg; int nResult = dlg.DoModal(); if( nResult == IDOK ) { } } void CMainFrame::OnGroupManager() { // TODO: 在此添加命令处理程序代码 CDlg_GroupManage dlg; int nResult = dlg.DoModal(); if( nResult == IDOK ) { } } void CMainFrame::OnEditPwd() { // TODO: 在此添加命令处理程序代码 CDlgEditPwd dlg; if( dlg.DoModal() == IDOK ) { CString sContent; sContent.Format("修改密码"); CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_PWD_EDIT,0,"",(char *)(LPCTSTR)sContent ); } } void CMainFrame::OnSingleAnalog() { // TODO: 在此添加命令处理程序代码 CAnalogDlg dlg; dlg.DoModal(); } LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: 在此添加专用代码和/或调用基类 switch( message ) { case WM_MY_NEW_ALERT: { CString sPath; CString sVarName = (char *)wParam; //LOG4C((LOG_NOTICE, "报警变量:%s", sVarName)); if( GetPicPathByVarName( sPath,sVarName ) ) { int nPos1=0,nPos2=0; for( int i=sPath.GetLength()-1;i>0;i-- ) { if( sPath[i]=='\\' ) { nPos1 = i; break; } } for( int i=sPath.GetLength()-1;i>0;i-- ) { if( sPath[i]=='.' ) { nPos2 = i; break; } } CString sName = sPath.Mid( nPos1+1,nPos2-nPos1-1 ); AddIDEView( sName,sPath ); } //LOG4C((LOG_NOTICE, "报警画面:%s", sPath)); } break; case WM_MY_SIZECHANGE: { CString str; str.Format( "%d,%d",wParam,lParam ); m_dlgEvent->SetPos( wParam,lParam ); } break; case WM_MY_SIZECHANGE2: { #if USE_NEWTOP CString str; str.Format( "%d,%d",wParam,lParam ); m_pToolBar->SetPos( wParam,lParam ); #endif } break; } return CMDIAutoHideFrame::WindowProc(message, wParam, lParam); } bool CMainFrame::GetPicIndexByPicPath( int &iIndex,CString sPicPath ) { bool bRet=false; for( int i=0;i= '0' && chr <= '9') return TRUE; else if ((chr >= 'A' && chr <= 'Z') || (chr >= 'a' && chr <= 'z') ) return TRUE; else if (chr == '_') return TRUE; else return FALSE; } //从组合公式中找出变量名加入到画面结构中 void CMainFrame::GetVarFromGSAddToStruct( int iIndex,CString sGS ) { //LOG4C((LOG_NOTICE, "GetVarFromGSAddToStruct sGS :%s", sGS)); //sGS = "(HG7053_DI10>=3)OR(HG7053_LinkStatus<=33)"; //sGS = "((HG7053_DI10>=3))"; //sGS = "(HG7053_DI10>=3)AND(HG7053_LinkStatus<=33)OR(HG7053_DI15<3)"; int nLen = sGS.GetLength(); int nPos1=0,nPos2=0; int nPos3=0,nPos4=0; CString sTemp,s1,s2,s3; CString sGS2[100]; int nCount=0; //OR AND NOT for( int i=0;i> m_Type; ar >> m_sizePic; ar >> m_sizeGrid; ar >> m_bGrid; ar >> m_clrBack; _ObjList.Serialize(ar); if( !_ObjList.IsEmpty() ) { for(POSITION pos = _ObjList.GetHeadPosition();pos!=NULL;) { POSITION pos1 = pos ; CDrawObj *ct = (CDrawObj *)_ObjList.GetNext(pos); int nInsert=0; if( ct->m_bVariant && ct->m_strCaption!="" && !VarIsExistInPic( iIndex,ct->m_strCaption,nInsert ) ) m_PIC_VAR[iIndex].sCaption[nInsert] = ct->m_strCaption; if( ct->m_strDynShow!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strDynShow ); if( ct->m_strDynForeCon!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strDynForeCon ); if( ct->m_strDynBackCon!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strDynBackCon ); if( ct->m_strDynLineCon!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strDynLineCon ); if( ct->m_strHoriPos!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strHoriPos ); if( ct->m_strHoriSize!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strHoriSize ); if( ct->m_strVertiPos!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strVertiPos ); if( ct->m_strVertiSize!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strVertiSize ); if( ct->m_strCurrentCaption!="" ) GetVarFromGSAddToStruct( iIndex,ct->m_strCurrentCaption ); if( ct->IsKindOf( RUNTIME_CLASS(CDrawBitmap) ) ) { if( ((CDrawBitmap *)ct)->m_strDynCondition!="" ) GetVarFromGSAddToStruct( iIndex,((CDrawBitmap *)ct)->m_strDynCondition ); } if( ct->IsKindOf( RUNTIME_CLASS(CDrawGif) ) ) { if( ((CDrawGif *)ct)->m_strDynCondition!="" ) GetVarFromGSAddToStruct( iIndex,((CDrawGif *)ct)->m_strDynCondition ); } } } /////////////////////////////////////// ar.Close(); file.Close(); } if(!_ObjList.IsEmpty()) { for(POSITION pos = _ObjList.GetHeadPosition();pos!=NULL;) { POSITION pos1 = pos ; CDrawObj *ct = (CDrawObj *)_ObjList.GetNext(pos); _ObjList.RemoveAt(pos1); delete ct; } _ObjList.RemoveAll(); ASSERT(_ObjList.IsEmpty()); } } //查找这个画面结构里是否已经有这个变量 bool CMainFrame::VarIsExistInPic( int iIndex,CString sVarName,int &iInsertIndex ) { bool bRet=false; for( int j=0;j<1000;j++ ) { if( m_PIC_VAR[iIndex].sCaption[j]=="" ) { iInsertIndex = j; break; } //if( -1 != m_PIC_VAR[iIndex].sCaption[j].Find( sVarName ) ) if( m_PIC_VAR[iIndex].sCaption[j] == sVarName ) { bRet = true; break; } } return bRet; } void CMainFrame::GetCurPicVarToSArray( CString sPicPath ) { //LOG4C((LOG_NOTICE, "开始获取 当前画面%s 变量", sPicPath)); for( int i=0;im_bIsChangeView = true; //Sleep(300); //LOG4C((LOG_NOTICE, "init")); //EnterCriticalSection( &g_CSLimit ); //LOG4C((LOG_NOTICE, "in")); //pVariantsManager->m_analogTemp.RemoveAll(); for( int j=0;j<1000;j++ ) { if( m_PIC_VAR[i].sCaption[j]=="" ) { break; } ////////////////////////////////////////////////// int nVarSize = pVariantsManager->m_analog.GetSize(); for ( int nVarIndex = 0; nVarIndex< nVarSize; nVarIndex++) { CAnalog* analog = pVariantsManager->m_analog.GetAt(nVarIndex); if( analog->m_strName == m_PIC_VAR[i].sCaption[j] ) { //LOG4C((LOG_NOTICE, "当前画面变量 %s", analog->m_strName)); pVariantsManager->m_analogTemp.Add( analog ); } } ////////////////////////////////////////////////// } //LOG4C((LOG_NOTICE, "out")); //LeaveCriticalSection( &g_CSLimit ); //LOG4C((LOG_NOTICE, "end")); pVariantsManager->m_bIsChangeView = true; break; } } //LOG4C((LOG_NOTICE, "结束获取 当前画面%s 变量", sPicPath)); } bool CMainFrame::MakeFolderExist( CString DirectoryName ) { if(DirectoryName[DirectoryName.GetLength()-1]!='\\') DirectoryName += "\\"; int nStart = 3; CString sTemp; for(int n = nStart;n