// 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 "ffsco.h" #include "Wizard.h" #include "DlgEditPwd.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_ADDVIEW, OnAddview) ON_COMMAND(ID_ADDVIEW2, OnAddview2) ON_COMMAND(ID_DELETEVIEW, OnDeleteview) ON_UPDATE_COMMAND_UI(ID_DELETEVIEW, OnUpdateDeleteview) ON_COMMAND(ID_MODIFYVIEWNAME, OnModifyViewName) 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_SUMMARY_LOG, OnSummaryLog) ON_WM_DESTROY() ON_WM_TIMER() ON_COMMAND(ID_EDIT_PWD, OnEditPwd) 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; 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; } 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; i < VIEW_MAX_NUM; i++) { m_PIC_VAR[i].sPicPath = ""; for (int j = 0; j < 1000; j++) { m_PIC_VAR[i].sCaption[j] = ""; m_PIC_VAR[i].nType[i] = 0; } } g_nRunEditVarTick = 0;//在运行状态编辑变量的TICK g_bRunEditVar = false;//是否在运行状态编辑变量 } CMainFrame::~CMainFrame() { } #if USE_TRAYICON BOOL CMainFrame::InstallIcons() { return Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid); } LRESULT CMainFrame::OnTaskBarCreated(WPARAM wp, LPARAM lp) { VERIFY(InstallIcons()); return 0; } ////////////////// // Handle notification from tray icon: display a message. // LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent) { if (m_bShowTrayNotifications) { static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE", "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK", "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK", "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" }; } // let tray icon do default stuff return m_trayIcon.OnTrayNotification(uID, lEvent); } #endif int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndTree.Create(WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT, CRect(0, 0, 0, 0), this, IDD_TREE_LEFT)) { TRACE0("Failed to create instant bar child\n"); return -1; } if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0(g_strTrace2); return -1; // 未能创建 } if (!m_wndDrawToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndDrawToolBar.LoadToolBar(IDR_DRAWTOOLS)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndDrawAlignBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndDrawAlignBar.LoadToolBar(IDR_ALIGN)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT))) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } // TODO: 如果不需要工具栏可停靠,则删除这三行 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndDrawToolBar.EnableDocking(CBRS_ALIGN_ANY); m_wndDrawAlignBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); m_wndStatusBar.SetPaneInfo(1, ID_INDICATOR_LOG, SBPS_NOBORDERS, 160); m_wndStatusBar.SetPaneInfo(3, ID_INDICATOR_LOG, SBPS_NOBORDERS, 80); RecalcLayout(); CRect rect; m_wndToolBar.GetWindowRect(rect); rect.OffsetRect(1, 0); //偏移一个位置 DockControlBar(&m_wndDrawAlignBar, CBRS_ALIGN_ANY, rect); DockControlBar(&m_wndDrawToolBar); //上面工具栏 if (g_bStartRun && g_nToolbarRun) { // CSize(),是用来设置高和宽的. if (!m_htopDockBar.Create(_T("topDockbar"), this, CSize(1920, 78), TRUE, 123)) { TRACE0("创建顶部工具栏失败.\n"); return -1; } m_htopDockBar.SetBarStyle(m_htopDockBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_htopDockBar.EnableDocking(CBRS_ALIGN_ANY); m_htopDockBar.m_bDrawTitleBar = false; DockControlBar(&m_htopDockBar, AFX_IDW_DOCKBAR_TOP); } //左边树形 if (!m_hleftDockBar.Create(_T("leftDockbar"), this, CSize(180, 260), TRUE, 123)) { TRACE0("创建左侧边栏失败.\n"); return -1; } m_hleftDockBar.SetBarStyle(m_hleftDockBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_hleftDockBar.EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_hleftDockBar, AFX_IDW_DOCKBAR_LEFT); CString strTitle; strTitle.LoadString(IDS_TREE_TITLE); m_hleftDockBar.AddPage(&m_wndTree, strTitle, IDR_MAINFRAME); //下面通知列表 if (!m_hbottomDockBar.Create(_T("bottomDockbar"), this, CSize(230, 120), TRUE, 123)) { TRACE0("创建底部通知栏失败.\n"); return -1; } m_hbottomDockBar.SetBarStyle(m_hbottomDockBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_hbottomDockBar.EnableDocking(CBRS_ALIGN_BOTTOM); DockControlBar(&m_hbottomDockBar, AFX_IDW_DOCKBAR_BOTTOM); CDrawObj::RegisterClass(g_strTline, RUNTIME_CLASS(CDrawTLine)); CDrawObj::RegisterClass(g_strText, RUNTIME_CLASS(CDrawText)); CDrawObj::RegisterClass(g_strRect, RUNTIME_CLASS(CDrawRect)); CDrawObj::RegisterClass(g_strButton, RUNTIME_CLASS(CDrawButton)); CDrawObj::RegisterClass(g_strLine, RUNTIME_CLASS(CDrawLine)); CDrawObj::RegisterClass(g_strBitmap, RUNTIME_CLASS(CDrawBitmap)); CDrawObj::RegisterClass(g_strTransfer, RUNTIME_CLASS(CDrawTransfer)); CDrawObj::RegisterClass(g_strRoundRect, RUNTIME_CLASS(CDrawRoundRect)); //CDrawObj::RegisterClass(g_strGIF,RUNTIME_CLASS(CDrawGif)); CDrawObj::RegisterClass(g_strFlash, RUNTIME_CLASS(CDrawFlash)); LoadRunPara(); if (g_nIsDemo == 0) { bool bIsBoxAppear = false; for (int iPortIndex = 0; iPortIndex < 2; iPortIndex++) { CString sPortTemp; sPortTemp.Format("%d", atoi(g_strServerPort) + iPortIndex); } } CRect rect1; GetWindowRect(&rect1); ScreenToClient(&rect1); 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; } if (!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; CRect rct; } // 初始化左边树形 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; printf("非全屏下计算任务栏高度:%d\n", nHeight); if (!g_bFullScreen) { W = screenx; H = screeny - nHeight; // 以屏幕尺寸的3/2来显示 [5/11/2016 IT] W /= 2; H /= 2; printf("W:%d, H:%d\n", W, H); //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); } //展开树 //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_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(); printf("x:%d, y:%d \n", sz.cx, sz.cy); // 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); CenterWindow(); } else if (g_nIsDemo == 1) { printf("g_nIsDemo = 1\n"); 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 < sContent.GetLength(); i++) { if (sContent[i] == '\\') nRet++; if (sContent[i] == '[') break; } return nRet; } CString CMainFrame::GetPreStr(CString sContent) { CString sRet; for (int i = sContent.GetLength() - 1; 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 < SA.GetCount(); i++) { str = SA.GetAt(i); if (str == sContent) { bExist = true; break; } } if (!bExist) { int nInsert = SA.GetCount(); CString s1; s1 = GetPreStr(sContent); for (int i = nInsert - 1; 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; i < nSize; i++) { sView = SA.GetAt(i); sTemp = sView; nLevel2 = GetLevel(sView); if (nLevel2 == 0) hItemInsert = hRoot; else { hItemInsert = hTemp[nLevel2 - 1]; } if (nLevel2 > 0) 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); //显示画面 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 < SA.GetCount(); i++) { s = SA.GetAt(i); sShow = sShow + s + "\n"; } //AfxMessageBox( sShow ); bool bExist = false; int nSize1 = SA.GetCount(); int nSize2 = SATemp.GetCount(); CString str1, str2; for (int i = nSize1 - 1; i >= 0; i--) { str1 = SA.GetAt(i); for (int j = 0; j < nSize2; j++) { str2 = SATemp.GetAt(j); if (str1 == str2) { bExist = true; break; } } if (!bExist) SA.RemoveAt(i); bExist = false; } AddViewToTree(m_hMonitor, SA); /////////////////////// //m_wndTree.SortChildren( m_hMonitor ); } void CMainFrame::OnFullScreen() { GetWindowPlacement(&m_OldWndPlacement); CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect); ClientToScreen(&ClientRect);// 获取屏幕的分辨率 int nFullWidth = GetSystemMetrics(SM_CXSCREEN); int nFullHeight = GetSystemMetrics(SM_CYSCREEN);// 将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区 //域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客 //户区位置间的差值, 就得到全屏显示的窗口位置 m_FullScreenRect.left = 0;//WindowRect.left-ClientRect.left-1; m_FullScreenRect.top = 0;//WindowRect.top-ClientRect.top-1; m_FullScreenRect.right = WindowRect.right - ClientRect.right + nFullWidth + 2; m_FullScreenRect.bottom = nFullHeight;//WindowRect.bottom-ClientRect.bottom+nFullHeight+2; // 进入全屏显示状态 WINDOWPLACEMENT wndpl; wndpl.length = sizeof(WINDOWPLACEMENT); wndpl.flags = 0; wndpl.showCmd = SW_SHOWNORMAL; wndpl.rcNormalPosition = m_FullScreenRect; SetWindowPlacement(&wndpl); } void CMainFrame::OnRun() { g_bRun = TRUE; //运行否 g_bEdit = FALSE; //编辑否 CDrawObj::bRuning = TRUE; m_wndToolBar.ShowWindow(SW_HIDE); m_wndDrawToolBar.ShowWindow(SW_HIDE); m_wndDrawAlignBar.ShowWindow(SW_HIDE); RecalcLayout(); if (g_nToolBarStatus)//&& !g_bFullScreen ) { m_wndStatusBar.ShowWindow(SW_SHOW); } else { m_wndStatusBar.ShowWindow(SW_HIDE); } m_hleftDockBar.ShowWindow(SW_SHOW); if (g_bHideTask) { HWND wnd = ::FindWindow("Shell_TrayWnd", NULL); ::ShowWindow(wnd, SW_HIDE); } //else //{ // HWND wnd = ::FindWindow("Shell_TrayWnd", NULL); // ::ShowWindow(wnd, SW_SHOW); //} 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_nIsDemo == 0) { if (!g_bFullScreen) { SetWindowPos(NULL, 0, 0, screenx, screeny - nHeight, SWP_NOZORDER); } else { SetWindowPos(NULL, 0, 0, screenx, screeny + 0, SWP_FRAMECHANGED);//关于全屏 } } SetMenu((CMenu*)NULL); } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if (!CMDIFrameWnd::PreCreateWindow(cs)) return FALSE; // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或 // 样式 if (!g_bStartRun) { cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE; } else { cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX | WS_TILED; } return TRUE; } // CMainFrame 诊断 #ifdef _DEBUG void CMainFrame::AssertValid() const { CMDIFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CMDIFrameWnd::Dump(dc); } #endif //_DEBUG // CMainFrame 消息处理程序 void CMainFrame::OnSuperEnd() { // TODO: 在此添加命令处理程序代码 m_bShutdown = TRUE; // really exit SendMessage(WM_CLOSE); } void CMainFrame::OnTrayOpen() { // TODO: 在此添加命令处理程序代码 ShowWindow(SW_MAXIMIZE); SetForegroundWindow(); } void CMainFrame::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 #if USE_TRAYICON #else m_bShutdown = TRUE; #endif if (m_bShutdown) { if (g_nIsDemo == 1) { if (MessageBox(g_strExitConfirm, g_strTip, MB_YESNO | MB_ICONQUESTION) == IDNO) { return; } } #if 0 // 暂时不使用登陆框 [8/29/2013 hero] else { CLogin dlg; dlg.m_bShutdown = true; if (dlg.DoModal() != IDOK) { m_bShutdown = false; return; } CString sContent; sContent.Format("用戶< %s >注销", dlg.m_sUserID); CDBInterface::GetInstancePtr()->InsertLogRecord(LOG_LOGOUT, 0, "", (char *)(LPCTSTR)sContent); } #endif if (g_bRun) { } 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; 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_hSystem) { SetRunPara(); } // 变量编辑 else if (m_hAnalog == hSelectedItem) { } else // 设备属性设置xs { if (g_nIsDemo == 0) { int nRet = ShowDevProperty(hSelectedItem); if (nRet == 1) { if (hSelectedItem) { // 这里一删除就报异常,只能先注释,待解决 for Jesse 100106 //m_wndTree.DeleteItem( m_hCurrent );//hSelectedItem } } } } 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 = 0;//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 = 0;//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) { 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::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) { return 1; } void CMainFrame::OnZuTaiAdd() { CDlg_Pwd Dlg_Pwd; Dlg_Pwd.m_nShowType = 2; if (Dlg_Pwd.DoModal() != IDOK) return; } 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::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; } 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::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 i = 0, nPos = -1; for (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::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; CFileException e; if (MyFile.Open(sPath, CFile::modeCreate | CFile::modeWrite, &e)) { strTemp.Format("%s\n", strDesc); MyFile.SeekToEnd(); MyFile.WriteString(strTemp); MyFile.Close(); } } 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( nPosEnable(m_bEditPwd); } void CMainFrame::OnUpdateSysPare(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_bSysPare); } 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); } 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; } } } } CMDIAutoHideFrame::OnTimer(nIDEvent); } void CMainFrame::OnEditPwd() { // TODO: 在此添加命令处理程序代码 CDlgEditPwd dlg; if (dlg.DoModal() == IDOK) { CString sContent; sContent.Format("修改密码"); //CDBInterface::GetInstancePtr()->InsertLogRecord( LOG_PWD_EDIT,0,"",(char *)(LPCTSTR)sContent ); } } 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); } 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 < VIEW_MAX_NUM; i++) { if (m_PIC_VAR[i].sPicPath == "") { iIndex = i; break; } if (m_PIC_VAR[i].sPicPath == sPicPath) { bRet = true; break; } } return bRet; } //通过变量名查找画面 bool CMainFrame::GetPicPathByVarName(CString &sPicPath, CString sVarName) { bool bRet = false; bool bBreak = false; for (int i = 0; i < VIEW_MAX_NUM; i++) { if (m_PIC_VAR[i].sPicPath == "") break; for (int j = 0; j < 1000; j++) { if (m_PIC_VAR[i].sCaption[j] == "") { break; } if (-1 != m_PIC_VAR[i].sCaption[j].Find(sVarName)) { sPicPath = m_PIC_VAR[i].sPicPath; bRet = true; bBreak = true; break; } } if (bBreak) break; } return bRet; } // 判断是有效变量名 BOOL CMainFrame::IsValidChar(char chr) { if (chr >= '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) { 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 < nLen; i++) { if (sGS.Mid(i, 2) == "OR" && !IsValidChar(sGS[i + 2])) { sGS2[nCount++] = sGS.Mid(nPos1, i - nPos1); nPos1 = i + 2; } if ((sGS.Mid(i, 3) == "AND" || sGS.Mid(i, 3) == "NOT") && !IsValidChar(sGS[i + 3])) { sGS2[nCount++] = sGS.Mid(nPos1, i - nPos1); nPos1 = i + 3; } } if (nPos1 < nLen) { sGS2[nCount++] = sGS.Mid(nPos1, nLen - nPos1); } for (int iGSIndex = 0; iGSIndex < nCount; iGSIndex++) { nPos3 = 0; nPos4 = 0; nLen = sGS2[iGSIndex].GetLength(); if (!IsValidChar(sGS2[iGSIndex][0])) { if (IsValidChar(sGS2[iGSIndex][1])) nPos3 = 1; else nPos3 = 2; for (int i = nPos3; i < nLen; i++) { if (!IsValidChar(sGS2[iGSIndex][i])) { nPos4 = i - 0; break; } } sTemp = sGS2[iGSIndex].Mid(nPos3, nPos4 - nPos3); int nInsert = 0; if (!VarIsExistInPic(iIndex, sTemp, nInsert) && sTemp != "") m_PIC_VAR[iIndex].sCaption[nInsert] = sTemp; } else { for (int i = nPos3; i < nLen; i++) { if (!IsValidChar(sGS2[iGSIndex][i])) { nPos4 = i - 0; break; } } sTemp = sGS2[iGSIndex].Mid(nPos3, nPos4 - nPos3); int nInsert = 0; if (!VarIsExistInPic(iIndex, sTemp, nInsert) && sTemp != "") m_PIC_VAR[iIndex].sCaption[nInsert] = sTemp; } } } //把变量插入到相对应的画面结构 void CMainFrame::InsertPicPathToStruct(int iIndex, CString sPicPath) { //LOG4C((LOG_NOTICE, "InsertPicPathToStruct :%s", sPicPath)); CDrawObjList _ObjList; m_PIC_VAR[iIndex].sPicPath = sPicPath; BYTE m_Type; CSize m_sizePic; CSize m_sizeGrid; BOOL m_bGrid; COLORREF m_clrBack; CFile file; if (file.Open(sPicPath, CFile::modeRead)) { CArchive ar(&file, CArchive::load); ar >> 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; i < VIEW_MAX_NUM; i++) { if (m_PIC_VAR[i].sPicPath == "") { break; } if (m_PIC_VAR[i].sPicPath == sPicPath)//是当前画面 { for (int j = 0; j < 1000; j++) { if (m_PIC_VAR[i].sCaption[j] == "") { break; } } break; } } } bool CMainFrame::MakeFolderExist(CString DirectoryName) { if (DirectoryName[DirectoryName.GetLength() - 1] != '\\') DirectoryName += "\\"; int nStart = 3; CString sTemp; for (int n = nStart; n < DirectoryName.GetLength(); n++) { if (DirectoryName[n] == '\\') { sTemp = DirectoryName.Left(n); bool f = ExistFolder(sTemp); if (!ExistFolder(sTemp)) CreateDirectoryCHN(sTemp); } } return true; } bool CMainFrame::CreateDirectoryCHN(CString DirectoryName) { bool re = false; ::CreateDirectory(DirectoryName, NULL); return re; } bool CMainFrame::ExistFolder(CString FilePath) { return PathFileExists(FilePath); } void CMainFrame::CopyDirectory(CString sScrPath, CString sDescPath) { CString StrSourceFolder = sScrPath; CString StrDestFolder = sDescPath; char SourceFolder[MAX_PATH + 1] = " "; strcpy(SourceFolder, StrSourceFolder); char TargetFolder[MAX_PATH + 1] = " "; strcpy(TargetFolder, StrDestFolder); SHFILEOPSTRUCT lpFile; lpFile.hwnd = GetSafeHwnd(); lpFile.wFunc = FO_COPY; lpFile.pFrom = SourceFolder; lpFile.pTo = TargetFolder; lpFile.fFlags = FOF_ALLOWUNDO; lpFile.fAnyOperationsAborted = FALSE; lpFile.hNameMappings = NULL; lpFile.lpszProgressTitle = NULL; int ReturnValue = SHFileOperation(&lpFile); if (ReturnValue == 0) { if (lpFile.fAnyOperationsAborted == TRUE) ;//MessageBox( "复制文件夹的操作被取消 ", "信息提示 ",MB_OK+MB_ICONWARNING); else ;//MessageBox( "复制文件夹操作成功 ", "信息提示 ",MB_OK+MB_ICONWARNING); } else ;//MessageBox( "复制文件夹操作失败 ", "信息提示 ",MB_OK+MB_ICONEXCLAMATION); } void CMainFrame::GetPicPathByTree(HTREEITEM hItemSelect, CString &sPath) { if (m_hMonitor == hItemSelect) { return; } CString strSelect = m_wndTree.GetItemText(hItemSelect); sPath = strSelect + "\\" + sPath; HTREEITEM hItemParent = m_wndTree.GetParentItem(hItemSelect); if (hItemParent) GetPicPathByTree(hItemParent, sPath); }