// ZTEAnalysisDataDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "ZTEAnalysisData.h"
#include "ZTEAnalysisDataDlg.h"
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CChart.h"
#include "CCharts.h"
#include "CChartObject.h"
#include "CChartObjects.h"
#include "CSeries.h"
#include "CSeriesCollection.h"
#include "CAxis.h"
#include "CChartTitle.h"
#include "COMUTIL.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
struct LINE
{
CString Data_YMD;
CString Date_HMS;
CString Board;
CString CardType;
CString CPU_1;
CString CPU_2;
CString CPU_3;
CString CPU_4;
CString MEM_Total;
CString MEM_Free;
CString MEM_Userate;
};
typedef struct
{
CString szFileName2;
CString strPath;
CString LineBoard;
unsigned int CurFileIndex;
HWND hWnd;
BOOL bBusy;//线程是否在处理中
long FirstData;
long LastData;
}THREAD_INFO;
COleVariant covOptional((long)
DISP_E_PARAMNOTFOUND,VT_ERROR);
THREAD_INFO
ThreadInfo[200];//最多同时处理200个
CWinThread *
pThreadArray[200];//最多同时处理200个
//
CString szPathName = _T(""); // Full pathname of input raw
data file
CString szFileName = _T(""); // File name of input raw data
file
CString szFileTitle = _T(""); // File title
CString szDirPath = _T(""); // DIR PATH title
CString szFind = _T("");
unsigned int FileCont = 0;
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
CProgressCtrl *g_pProgress = NULL;
CProgressCtrl *g_pProgress2 = NULL;
//指向线程的指针
CWinThread * ptThread;
int TotalProg = 0;
int nCurThreadNum = 0;
CString ConfigThreadNum = _T("");
CString DispCtrl = _T("");
int nConfigThreadNum = 5;
int nDisplayControl = 1;
int nExceptionFileIndex = 0;
CStdioFile Recordfile;
CStdioFile RecordExceptfile;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CZTEAnalysisDataDlg 对话框
CZTEAnalysisDataDlg::CZTEAnalysisDataDlg(CWnd* pParent )
: CDialog(CZTEAnalysisDataDlg::IDD, pParent)
, ThreadNumber(_T(""))
, DisolayControl(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CZTEAnalysisDataDlg::DoDataExchange(CDataExchange*
pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PROGRESS2, ProcProgress);
DDX_Control(pDX, IDC_PROGRESS3, ProcProgress2);
DDX_Text(pDX, IDC_EDIT1, ThreadNumber);
DDX_Text(pDX, IDC_EDIT2, DisolayControl);
}
BEGIN_MESSAGE_MAP(CZTEAnalysisDataDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1,
&CZTEAnalysisDataDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2,
&CZTEAnalysisDataDlg::OnBnClickedButton2)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_PROGRESS2,
&CZTEAnalysisDataDlg::OnNMCustomdrawProgress2)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_PROGRESS3,
&CZTEAnalysisDataDlg::OnNMCustomdrawProgress3)
ON_STN_CLICKED(IDC_TT_PRG,
&CZTEAnalysisDataDlg::OnStnClickedTtPrg)
ON_MESSAGE(UM_MSG,
&CZTEAnalysisDataDlg::OnHandleMsg)
ON_MESSAGE(WM_DESTROY,
&CZTEAnalysisDataDlg::OnDestroy)
ON_EN_CHANGE(IDC_EDIT1,
&CZTEAnalysisDataDlg::OnEnChangeEdit1)
ON_EN_CHANGE(IDC_EDIT2,
&CZTEAnalysisDataDlg::OnEnChangeEdit2)
END_MESSAGE_MAP()
BOOL CheckProcIsRunning(void)
{
int i = 0;
for (i=0; i<200; i++)
{
if ((pThreadArray[i] != NULL ) &&
ThreadInfo[i].bBusy)
{
return TRUE;
}
}
return FALSE;
}
// CZTEAnalysisDataDlg 消息处理程序
BOOL CZTEAnalysisDataDlg::OnInitDialog()
{
CDialog::OnInitDialog();
FileCont = 0;
TotalProg = 0;
nCurThreadNum = 0;
nDisplayControl = 1;
nConfigThreadNum = 5;
nExceptionFileIndex = 0;
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
memset(pThreadArray,0,sizeof(pThreadArray));
#if 0
//初始化一定要加上,否则在有些电脑上,没法启动OLE服务(EXCEL等)
if (!AfxOleInit())
{
AfxMessageBox(_T("Init OLe failed"));
return FALSE;
}
AfxEnableControlContainer();
Sleep(10);
if (!app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("无法创建Excel应用!"));
return FALSE;
}
#endif
g_pProgress = NULL;
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}
g_pProgress = &ProcProgress;
g_pProgress2 = &ProcProgress2;
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
ProcProgress.SetRange(0,100);
ProcProgress.SetPos(0);
ProcProgress2.SetRange(0,100);
ProcProgress2.SetPos(0);
// TODO: 在此添加额外的初始化代码
GetDlgItem(IDC_TOTALFILE)->SetWindowText(_T("0"));
GetDlgItem(IDC_CURFILE)->SetWindowText(_T("0"));
GetDlgItem(IDC_TT_PRG)->SetWindowText(_T("0%"));
GetDlgItem(IDC_SUBPROG)->SetWindowText(_T("0%"));
GetDlgItem(IDC_INFO)->SetWindowText(_T(" "));
ThreadNumber.Format(_T("%d"),nConfigThreadNum);
DisolayControl.Format(_T("%d"),nDisplayControl);
UpdateData(FALSE);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CZTEAnalysisDataDlg::OnSysCommand(UINT nID, LPARAM
lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CZTEAnalysisDataDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND,
reinterpret_cast(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CZTEAnalysisDataDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}
void CZTEAnalysisDataDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int i = 0, j =0;
CStdioFile file;//当前打开的文件
if (CheckProcIsRunning())
{
AfxMessageBox(_T("Processing,Please wait~~~"));
return;
}
FileCont = 0;
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, NULL);
if(dlg.DoModal() ==
IDOK)
{
szPathName = dlg.GetPathName();
szFileName = dlg.GetFileName();
szFileTitle = dlg.GetFileTitle();
//AfxMessageBox(szPathName);
}
if (!file.Open(szPathName,CFile::modeRead))
{
AfxMessageBox(_T("Open file failed"));
return;
}
file.Close();
szDirPath = szPathName;
//szDirPath = szPathName.Trim(szFileName);
szDirPath.Replace(szFileName,_T(""));
//szDirPath.Replace(_T("\"),_T("//"));
szFind.Format(_T("%s\*.txt"),szDirPath);
#if 1
CFileFind finder;
CString strPath;
BOOL
bWorking = finder.FindFile(szFind,0);
while
(bWorking)
{
bWorking =
finder.FindNextFile();
//strPath=finder.GetFilePath();
//strPath就是所要获取Test目录下的文件夹和文件(包括路径)
//AfxMessageBox(strPath);
FileCont ++;
}
finder.Close();
#endif
CString Disp;
Disp.Format(_T("%d"),FileCont);
//AfxMessageBox(Disp);
GetDlgItem(IDC_TOTALFILE)->SetWindowText(Disp);
if (FileCont)
{
if
(!Recordfile.Open(szDirPath+_T("RecordInfo.Log"),CFile::modeReadWrite
| CFile::modeCreate))
{
AfxMessageBox(_T("Open file failed"));
}
if(!CreateDirectory(szDirPath+_T("\\ExceptionFile"),NULL))
{
AfxMessageBox(_T("Create dir failed"));
}
if
(!RecordExceptfile.Open(szDirPath+_T("\\ExceptionFile\\RecordExceptionInfo.Log"),CFile::modeReadWrite
| CFile::modeCreate))
{
AfxMessageBox(_T("Open file failed"));
}
}
#if 0
//这个是导入已经存在的EXCEL文档
lpDisp = books.Open(strCreateFile,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional
);
//与的不同,是个参数的,直接在后面加了两个covOptional成功了
book.AttachDispatch(lpDisp);
#endif
#if 0
strCreateFile = szDirPath +_T("Data.xlsx");
CString strCreateFile;
LPDISPATCH lpDisp; //接口指针
//创建一个新的EXCEL文档
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
sheets.Add(covOptional,covOptional,covOptional,covOptional);
book.SaveAs(COleVariant(strCreateFile),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);
#endif
}
#if 1
void DisplaySubThreadInfo(HWND hmyWnd,long ThreadID,int
Per)
{
long Data = ThreadID * 1000 + Per;
g_pProgress2->SetPos(Per);
SendMessage(hmyWnd,UM_MSG,IDC_SUBPROG,Data);
}
UINT DataProc(LPVOID lpParam)
{
// TODO: 在此添加控件通知处理程序代码
int j = 0,i = 0, Length = 0, pos = 0, cnt = 0, Index =
0;
unsigned int SheetIndex = 1;
char *pcTmp = NULL;
unsigned int DataLineCnt = 0;
long FirtData = 0;
long LastData = 0;
VARIANT ret;
CApplication app;
CWorkbook book;
CWorkbooks books;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CRange cols;
int nTT = 0;
LINE Line;
CString StrLine = _T("");
CString Temp = _T("");;
HWND hmyWnd = NULL;
CString strName = _T("");;
CString strPath = _T("");;
CString szFileName2 = _T("");;
CString szCreateFileName = _T("");;
THREAD_INFO * pThreadInfo = NULL;
CStdioFile file;//当前打开的文件
pThreadInfo = (THREAD_INFO *)lpParam;
pThreadInfo->bBusy = TRUE;
strPath = pThreadInfo->strPath;
szFileName2 = pThreadInfo->szFileName2;
hmyWnd = pThreadInfo->hWnd;
SheetIndex = pThreadInfo->CurFileIndex;
//初始化一定要加上,否则在有些电脑上,没法启动OLE服务(EXCEL等)
if (!AfxOleInit())
{
AfxMessageBox(_T("Init OLe failed"));
return FALSE;
}
AfxEnableControlContainer();
Sleep(10);
if (!app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox(_T("无法创建Excel应用!"));
return FALSE;
}
//szCreateFileName = szFileName2.Trim(_T(".txt"));
szCreateFileName = szFileName2;
szCreateFileName.Replace(_T(".txt"),_T(""));
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
book.SaveAs(COleVariant(szDirPath+szCreateFileName+_T(".xlsx")),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);
//strPath就是所要获取Test目录下的文件夹和文件(包括路径)
//AfxMessageBox(strPath);
if (!file.Open(strPath,CFile::modeRead))
{
AfxMessageBox(_T("Open file failed"));
pThreadArray[SheetIndex] = NULL;
pThreadInfo->bBusy = FALSE;
return 0;
}
sheet =
sheets.Add(covOptional,covOptional,covOptional,covOptional);
//sheet =
sheets.get_Item(COleVariant((short)SheetIndex));
//要加判断,如果该行没有 满足多少个字符以上,就表示这行不是要统计的数据行,而是其他的打印信息
//获取 用 findoneof 找特征字串来过滤
i = 1;
j = 0;
Index = 0;
DisplaySubThreadInfo(hmyWnd,SheetIndex,10);
while(file.ReadString(StrLine))
{
while(Index<11)
{
AfxExtractSubString(Temp, StrLine, j++, ' ');
if(Temp.GetLength())
{
switch(Index)
{
case 0: Line.Data_YMD = Temp;break;
case 1: Line.Date_HMS = Temp;break;
case 2: Line.Board = Temp;break;
case 3: Line.CardType = Temp;break;
case 4: Line.CPU_1 = Temp;break;
case 5: Line.CPU_2 = Temp;break;
case 6: Line.CPU_3 = Temp;break;
case 7: Line.CPU_4 = Temp;break;
case 8: Line.MEM_Total = Temp;break;
case 9: Line.MEM_Free = Temp;break;
case 10: Line.MEM_Userate = Temp;break;
default: break;
}
Index++;
}
}
j = 0;
Index = 0;
Line.CPU_1 = Line.CPU_1.Left(2);
Line.CPU_2 = Line.CPU_2.Left(2);
Line.CPU_3 = Line.CPU_3.Left(2);
Line.CPU_4 = Line.CPU_4.Left(2);
Line.MEM_Userate = Line.MEM_Userate.Left(6);
//sscanf(StrLine,"%[^ ] %[^ ] %[^ ] %[^ ] %[^ ] %[^ ] %[^ ]
%[^ ] %[^ ] %[^ ] %[^ ]
",Line.Data_YMD,Line.Date_HMS,Line.Board,Line.CardType,Line.CPU_1,
//
Line.CPU_2,Line.CPU_3,Line.CPU_4,Line.MEM_Total,Line.MEM_Free,Line.MEM_Userate);
Temp.Format(_T("A%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.Data_YMD));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("B%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.Date_HMS));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("C%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.Board));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("D%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.CardType));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("E%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.CPU_1));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("F%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.CPU_2));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("G%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.CPU_3));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("H%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.CPU_4));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("I%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.MEM_Total));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("J%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.MEM_Free));
//cols = range.get_EntireColumn();
//cols.AutoFit();
Temp.Format(_T("K%d"),i);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
range.put_Value2(COleVariant(Line.MEM_Userate));
//cols = range.get_EntireColumn();
//cols.AutoFit();
i ++;
//SendMessage(hmyWnd,UM_MSG,IDC_INFO,i);
}
DataLineCnt = i - 1;
file.Close();
pThreadInfo->LineBoard = Line.Board;
Temp.Format(_T("J1"));
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
ret = range.get_Value2();
FirtData = (long)ret.dblVal;
pThreadInfo->FirstData = FirtData;
Temp.Format(_T("J%d"),DataLineCnt);
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
ret = range.get_Value2();
LastData = (long)ret.dblVal;
pThreadInfo->LastData = LastData;
CString Express;
//在L1单元格中保存 板子的信息
Temp.Format(_T("L1"));
range =
sheet.get_Range(COleVariant(Temp),COleVariant(Temp));
Express.Format(_T("%s--%s: %d - %d =
%dM"),szFileName2,Line.Board,LastData,FirtData,LastData-
FirtData);
range.put_Value2(COleVariant(Express));
DisplaySubThreadInfo(hmyWnd,SheetIndex,20);
//Temp.Format(_T("%s"),szFileName);
//sheet.put_Name(szFileName2);
CChartObjects
chartobjects;
CCharts
charts;
CChart chart;
LPDISPATCH lpDisp;
// Common OLE variants.
These are easy variants to use for
// calling
arguments.
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE);
// The cells are
populated. To start the chart,
// declare some long
variables and site the chart.
long left, top, width,
height;
left = 300+510;
top = 10+10;
width = 500;
height = 300;
lpDisp =
sheet.ChartObjects(covOptional);
ASSERT(lpDisp);
chartobjects.AttachDispatch(lpDisp); // Attach
the lpDisp pointer
// for ChartObjects to the
chartobjects
// object.
CChartObject chartobject
= chartobjects.Add(left, top, width,
height);
//defines the rectangle,
// adds a new chart at that rectangle
and
// assigns its object reference to a
// ChartObject variable named chartobject
chart.AttachDispatch(chartobject.get_Chart()); //
GetChart() returns
// LPDISPATCH, and this attaches
// it to your chart object.
VARIANT var; //
ChartWizard needs a Variant for the Source range.
var.vt = VT_DISPATCH; //
.vt is the usable member of the tagVARIANT
// Struct. Its value is a union of options.
var.pdispVal = lpDisp; //
Assign IDispatch pointer
// of the Source range to var.
DisplaySubThreadInfo(hmyWnd,SheetIndex,30);
chart.put_ChartType(long(4));
CChartTitle charttitle;
// 设置图表标题
chart.put_HasTitle(TRUE);
charttitle = chart.get_ChartTitle();
charttitle.put_Text(Line.Board+_T("_CPU使用率"));
CSeriesCollection serc;
CSeries sercies;
CAxis axis;
///
serc = chart.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("E%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("E1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("CPU_5S"));
DisplaySubThreadInfo(hmyWnd,SheetIndex,40);
///
serc = chart.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("F%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("F1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("CPU_15S"));
g_pProgress2->SetPos(50);
DisplaySubThreadInfo(hmyWnd,SheetIndex,50);
///
serc = chart.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("G%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("G1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("CPU_1M"));
DisplaySubThreadInfo(hmyWnd,SheetIndex,60);
///
serc = chart.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("H%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("H1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("CPU_5M"));
DisplaySubThreadInfo(hmyWnd,SheetIndex,70);
/
/
left = 300;
top = 10+10;
width = 500;
height = 300;
CChart chart1;
CChartObject chartobject1
= chartobjects.Add(left, top, width,
height);
//defines the rectangle,
// adds a new chart at that rectangle
and
// assigns its object reference to a
// ChartObject variable named chartobject
chart1.AttachDispatch(chartobject1.get_Chart());
// GetChart() returns
// LPDISPATCH, and this attaches
// it to your chart object
CChartTitle charttitle1;
chart1.put_ChartType(long(4));
// 设置图表标题
chart1.put_HasTitle(TRUE);
charttitle1 = chart1.get_ChartTitle();
Temp.Format(_T("_可用内存(MM_Total=%s)"),Line.MEM_Total);
charttitle1.put_Text(Line.Board+Temp);
DisplaySubThreadInfo(hmyWnd,SheetIndex,80);
///
serc = chart1.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("J%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("J1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("MEM_FREE"));
DisplaySubThreadInfo(hmyWnd,SheetIndex,90);
Sleep(1);
/
/
left = 300;
top = 10+310+10;
width = 500;
height = 300;
CChart chart2;
CChartObject chartobject2
= chartobjects.Add(left, top, width,
height);
//defines the rectangle,
// adds a new chart at that rectangle
and
// assigns its object reference to a
// ChartObject variable named chartobject
chart2.AttachDispatch(chartobject2.get_Chart());
// GetChart() returns
// LPDISPATCH, and this attaches
// it to your chart object
CChartTitle charttitle2;
chart2.put_ChartType(long(4));
// 设置图表标题
chart2.put_HasTitle(TRUE);
charttitle2 = chart2.get_ChartTitle();
charttitle2.put_Text(Line.Board+_T("_内存利用率"));
///
serc = chart2.SeriesCollection(covOptional);
sercies = serc.NewSeries();
Temp.Format(_T("B%d"),DataLineCnt);
lpDisp = sheet.get_Range(COleVariant(_T("B1")),
COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_XValues(var); // 设置X轴的数据
Temp.Format(_T("K%d"),DataLineCnt);
lpDisp =
sheet.get_Range(COleVariant(_T("K1")),COleVariant(Temp));
var.pdispVal = lpDisp;
sercies.put_Values(var); // 设置Y轴的数据
sercies.put_Name(_T("MEM_USE_RATE"));
DisplaySubThreadInfo(hmyWnd,SheetIndex,95);
Sleep(1);
/
/
// ProcProgress.SetPos( ((float)SheetIndex / (float)FileCont)
* 100.0);
//book.put_ConflictResolution(2);
//book.SaveAs(COleVariant(szDirPath+_T("Data.xls")),covOptional,covOptional,covOptional,covOptional,covOptional,0,(COleVariant)(long)2,covOptional,covOptional,covOptional,(COleVariant)(long)2);
//XlSaveAsAccessMode vSaveAsAccessMode = xlNoChange ;
//XlFileFormat vFileFormat = xlWorkbookNormal ;
//XlSaveConflictResolutionvSaveConflictResolution =
xlLocalSessionChanges ;
//book.SaveAs(COleVariant(szDirPath+_T("Data.xls")),
-4143,_variant_t(""),_variant_t(""), _variant_t(false),
//_variant_t(false), 1, 2, _variant_t(false));
book.Save();
if((LastData- FirtData) < 0)
{
CString TmpPath;
TmpPath.Format(_T("%s\ExceptionFile\\%s.xlsx"),szDirPath,szCreateFileName);
book.SaveAs(COleVariant(TmpPath),covOptional,covOptional,covOptional,covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,covOptional,covOptional);
}
DisplaySubThreadInfo(hmyWnd,SheetIndex,100);
if (FileCont != 0)
{
SendMessage(hmyWnd,UM_MSG,IDC_TT_PRG,(LPARAM)pThreadInfo);
}
if (nDisplayControl == 3)
{
//显示Excel表
app.put_Visible(TRUE);
app.put_UserControl(TRUE);
}
else if ((FirtData > LastData)&&(nDisplayControl ==
2))
{
//显示Excel表
app.put_Visible(TRUE);
app.put_UserControl(TRUE);
}
if (nDisplayControl == 1)
{
books.Close();
app.Quit();
}
else if ((nDisplayControl == 2) && ((FirtData <=
LastData)))
{
books.Close();
app.Quit();
}
Sleep(1);
lpDisp->Release();
serc.ReleaseDispatch();
sercies.ReleaseDispatch();
axis.ReleaseDispatch();
charttitle.ReleaseDispatch();
charttitle1.ReleaseDispatch();
charttitle2.ReleaseDispatch();
chart.ReleaseDispatch();
chart1.ReleaseDispatch();
chart2.ReleaseDispatch();
charts.ReleaseDispatch();
chartobject.ReleaseDispatch();
chartobject1.ReleaseDispatch();
chartobject2.ReleaseDispatch();
chartobjects.ReleaseDispatch();
range.ReleaseDispatch();
cols.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
if (nDisplayControl == 1)
{
books.Close();
app.Quit();
}
else if ((nDisplayControl == 2) && ((FirtData <=
LastData)))
{
books.Close();
app.Quit();
}
pThreadArray[SheetIndex] = NULL;
pThreadInfo->bBusy = FALSE;
return 0;
}
UINT CreateThread(LPVOID lpParam)
{
unsigned int i = 1;
CFileFind finder;
HWND hmyWnd = (HWND)lpParam;
BOOL
bWorking = finder.FindFile(szFind,0);
while
(bWorking)
{
if (nCurThreadNum < nConfigThreadNum )
{
bWorking = finder.FindNextFile();
ThreadInfo[i].strPath = finder.GetFilePath();
ThreadInfo[i].szFileName2 = finder.GetFileName();
ThreadInfo[i].CurFileIndex = i;
ThreadInfo[i].hWnd = hmyWnd;
//创建线程,每一个文件用一个线程来处理,最多200个
if(pThreadArray[i]==NULL)
{
pThreadArray[i] =
AfxBeginThread(DataProc,(LPVOID)&(ThreadInfo[i]),THREAD_PRIORITY_HIGHEST,0,CREATE_SUSPENDED,NULL);
}
if(pThreadArray[i]!=NULL)
{
nCurThreadNum ++;
pThreadArray[i]->ResumeThread();
}
i++;
if ( nCurThreadNum > 50)
{
break;
}
Sleep(60);
}
else
{
Sleep(500);
}
SendMessage(hmyWnd,UM_MSG,IDC_CURFILE,nCurThreadNum);
}
return 1;
}
#endif
void CZTEAnalysisDataDlg::OnBnClickedButton2()
{
if (CheckProcIsRunning())
{
AfxMessageBox(_T("Processing,Please wait~~~"));
return;
}
TotalProg = 0;
nCurThreadNum = 0;
if(ptThread==NULL)
{
ptThread =
AfxBeginThread(CreateThread,(LPVOID)GetSafeHwnd(),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
}
//如果创建成功,则恢复该线程的运行
if(ptThread!=NULL)
{
ptThread->ResumeThread();
}
}
void CZTEAnalysisDataDlg::OnNMCustomdrawProgress1(NMHDR
*pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CZTEAnalysisDataDlg::OnNMCustomdrawProgress2(NMHDR
*pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CZTEAnalysisDataDlg::OnNMCustomdrawProgress3(NMHDR
*pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CZTEAnalysisDataDlg::OnStnClickedTtPrg()
{
// TODO: 在此添加控件通知处理程序代码
}
LRESULT
CZTEAnalysisDataDlg::OnHandleMsg(WPARAM wParam,
LPARAM lParam)
{
int nTT = 0;
CString Tmp;
CString Name;
CString WriteInfo;
THREAD_INFO * pThreadInfo = NULL;
if (IDC_CURFILE == (int)wParam || IDC_INFO ==
(int)wParam)
{
Tmp.Format(_T("%d"),lParam);
}
else if (IDC_TT_PRG == (int)wParam)
{
TotalProg ++;
nCurThreadNum --;
Tmp.Format(_T("%d"),nCurThreadNum);
GetDlgItem(IDC_CURFILE)->SetWindowText(Tmp);
nTT = (int)(((float)(TotalProg) * 100.0 /
(float)FileCont));
g_pProgress->SetPos(nTT);
Tmp.Format(_T("%d%%"),nTT);
pThreadInfo = (THREAD_INFO *)lParam;
Name = pThreadInfo->szFileName2;
Name.Replace(_T(".txt"),_T(""));
WriteInfo.Format(_T("%d: %s
%s ==> %d
M\n"),pThreadInfo->CurFileIndex,Name,pThreadInfo->LineBoard,pThreadInfo->LastData-pThreadInfo->FirstData);
Recordfile.WriteString(WriteInfo);
Recordfile.Flush();
if ((pThreadInfo->LastData-pThreadInfo->FirstData) <
0)
{
nExceptionFileIndex ++;
WriteInfo.Format(_T("%d: %s %s ==> %d
M\n"),nExceptionFileIndex,Name,pThreadInfo->LineBoard,pThreadInfo->LastData-pThreadInfo->FirstData);
RecordExceptfile.WriteString(WriteInfo);
RecordExceptfile.Flush();
}
if(!CheckProcIsRunning())
{
Recordfile.Close();
RecordExceptfile.Close();
}
}
else if (IDC_SUBPROG == (int)wParam)
{
int ThreadID = (long)lParam /1000;
int Per = (long)lParam00;
CString Info;
Tmp.Format(_T("%d%%"),Per);
Info.Format(_T("Sub Thread = %d"),ThreadID);
GetDlgItem(IDC_INFO)->SetWindowText(Info);
}
GetDlgItem(wParam)->SetWindowText(Tmp);
return 0;
}
LRESULT
CZTEAnalysisDataDlg::OnDestroy(WPARAM wParam,
LPARAM lParam)
{
Recordfile.Close();
RecordExceptfile.Close();
//显示Excel表
//app.put_Visible(TRUE);
//app.put_UserControl(TRUE);
//sheets.ReleaseDispatch();
//book.ReleaseDispatch();
//books.ReleaseDispatch();
//app.ReleaseDispatch();
return 0;
}
void CZTEAnalysisDataDlg::OnEnChangeEdit1()
{
int nTmp = 0;
UpdateData(TRUE);
ConfigThreadNum = ThreadNumber;
nTmp = _ttoi(ConfigThreadNum);
if ( (1 <= nTmp) && (nTmp <= 50))
{
nConfigThreadNum = nTmp;
}
else
{
AfxMessageBox(_T("Range:1 -- 50"));
}
}
void CZTEAnalysisDataDlg::OnEnChangeEdit2()
{
int nTmp = 0;
UpdateData(TRUE);
DispCtrl = DisolayControl;
nTmp = _ttoi(DispCtrl);
if ( (1 <= nTmp) && (nTmp <= 3))
{
nDisplayControl = nTmp;
if ( (2 == nTmp) || (nTmp == 3))
{
AfxMessageBox(_T("Because the computer resources are
limited,please do not open too much files,please close files
timely..."));
}
}
else
{
AfxMessageBox(_T("Range:1 -- 3\n1:Do not show any
files\n2:Show exception files\n3:Show all files"));
}
}