QuakeGod
2023-10-20 6fa60de2b0d0237054aa7571191df0f291838031
提交 | 用户 | age
418cb3 1 // CDialogStatusShow.cpp: 实现文件
Q 2 //
3
4 #include "pch.h"
5 #include "MTerm1.h"
6 #include "DialogStatusShow.h"
7 #include "afxdialogex.h"
8 //#include "KLink.h"
9 #include "MTerm1Doc.h"
10 // CDialogStatusShow 对话框
11
12 IMPLEMENT_DYNAMIC(CDialogStatusShow, CDialogEx)
13
14 CDialogStatusShow::CDialogStatusShow(CWnd* pParent /*=nullptr*/)
15     : CDialogEx(IDD_DIALOG_STATUS_SHOW, pParent)
16 {
17
18 }
19
20 CDialogStatusShow::~CDialogStatusShow()
21 {
22 }
23
24 void CDialogStatusShow::DoDataExchange(CDataExchange* pDX)
25 {
26     CDialogEx::DoDataExchange(pDX);
27     DDX_Control(pDX, IDC_LIST_STATUS1, m_liststatus1);
28 }
29
30
31 BEGIN_MESSAGE_MAP(CDialogStatusShow, CDialogEx)
32     ON_WM_CLOSE()
33     ON_WM_TIMER()
34     ON_BN_CLICKED(IDC_BUTTON_CLEAR_STATISTICS, &CDialogStatusShow::OnBnClickedButtonClearStatistics)
35 END_MESSAGE_MAP()
36
37
38 // CDialogStatusShow 消息处理程序
39
40
41 BOOL CDialogStatusShow::OnInitDialog()
42 {
43     CDialogEx::OnInitDialog();
44
45     // TODO:  在此添加额外的初始化
46     ShowParams();
47     //    m_liststatus1.SetExtendedStyle();
48     SetTimer(1, 100, NULL);
49
50     return TRUE;  // return TRUE unless you set the focus to a control
51                   // 异常: OCX 属性页应返回 FALSE
52 }
53
54 int CDialogStatusShow::ShowParams()
55 {
56     // TODO: 在此处添加实现代码.
57     m_liststatus1.SetExtendedStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_EX_LABELTIP);
58     m_liststatus1.DeleteAllItems();
59     while (m_liststatus1.DeleteColumn(0));
60     m_liststatus1.InsertColumn(0, _T("NO"), LVCFMT_LEFT, 96, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
61     m_liststatus1.InsertColumn(1, _T("子机0"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
62     m_liststatus1.InsertColumn(2, _T("子机1"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
63     m_liststatus1.InsertColumn(3, _T("子机2"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
64     m_liststatus1.InsertColumn(4, _T("子机3"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
65     m_liststatus1.InsertColumn(5, _T("子机4"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
66     m_liststatus1.InsertColumn(6, _T("子机5"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
67     m_liststatus1.InsertColumn(7, _T("子机6"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
68     m_liststatus1.InsertColumn(8, _T("子机7"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
69     m_liststatus1.InsertColumn(10, _T("子机8"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
70
71     m_liststatus1.InsertItem(0, _T("状态"));
72     m_liststatus1.InsertItem(1, _T("发送包计数"));
73     m_liststatus1.InsertItem(2, _T("接收包计数"));
74     m_liststatus1.InsertItem(3, _T("发送时间(uS)"));
75     m_liststatus1.InsertItem(4, _T("丢包计数"));
76     m_liststatus1.InsertItem(5, _T("连续丢包"));
77     m_liststatus1.InsertItem(6, _T("最大连续"));
78     m_liststatus1.InsertItem(7, _T("非包计数"));
79 //    m_liststatus1.InsertItem(8, _T("无结尾包"));
80     m_liststatus1.InsertItem(8, _T("包长错误"));
81     m_liststatus1.InsertItem(9, _T("校验错误"));
82     m_liststatus1.InsertItem(10, _T("超时错误"));
83     m_liststatus1.InsertItem(11, _T("返回延迟(uS)"));
84     m_liststatus1.InsertItem(12, _T("最大延迟(uS)"));
85     m_liststatus1.InsertItem(13, _T("循环时间(uS)"));
86     m_liststatus1.InsertItem(14, _T("子机接收"));
87     m_liststatus1.InsertItem(15, _T("子机发送"));
88     m_liststatus1.InsertItem(16, _T("子机非包"));
89     m_liststatus1.InsertItem(17, _T("子机非ID"));
90 //    m_liststatus1.InsertItem(18, _T("子机无尾"));
91     m_liststatus1.InsertItem(18, _T("子机包长"));
92     m_liststatus1.InsertItem(19, _T("子机校验"));
93     m_liststatus1.InsertItem(20, _T("子机超时"));
94
95
96     return 0;
97 }
98
99
100 int CDialogStatusShow::GetParams()
101 {
102     // TODO: 在此处添加实现代码.
103     return 0;
104 }
105
106 int CDialogStatusShow::DoMonitor()
107 {
108     // TODO: 在此处添加实现代码.
109     return 0;
110 }
111
112 int CDialogStatusShow::UpdateDisplay()
113 {
114     CMDIFrameWnd  *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
115     CMDIChildWnd  *pChild = (CMDIChildWnd   *)pFrame->GetActiveFrame();
116     CView   *pV = (CView*)pChild->GetActiveView();
117     CMTerm1Doc* pDoc = (CMTerm1Doc *)(pV->GetDocument());
118
119     // TODO: 在此处添加实现代码.
120     CString s1, s2;
121     int nOffset = 0;
122     KLink1::pChnStat pchnstat1;
123     unsigned int nSendPackets;
124     int nChilds = 8;
125     //子机1  
126     //子机2
127     for (int i = 0; i < nChilds; i++)
128     {
129         nOffset = 0 + sizeof(KLink1::stChnStat) * i;
130         pchnstat1 = (KLink1::pChnStat)&(pDoc->KBDB[nOffset + 0]);
131         nSendPackets = pchnstat1->SendPackets;
132         if (nSendPackets == 0) nSendPackets = 1;
133         s1.Format(_T("%08X"), pchnstat1->Stat);
134         m_liststatus1.SetItemText(0, 1 + i, s1);
135
136         s1.Format(_T("%u"), pchnstat1->SendPackets);
137         m_liststatus1.SetItemText(1, 1 + i, s1);
138         s1.Format(_T("%u (%.3f%%)"), pchnstat1->RecvPackets, pchnstat1->RecvPackets *100.0 / nSendPackets);
139         m_liststatus1.SetItemText(2, 1 + i, s1);
140         s1.Format(_T("%u"), pchnstat1->LastSentTimeuS);
141         m_liststatus1.SetItemText(3, 1 + i, s1);
142         s1.Format(_T("%u (%.3f%%)"), pchnstat1->LostPackets, pchnstat1->LostPackets *100.0 / nSendPackets);
143         m_liststatus1.SetItemText(4, 1 + i, s1);
144
145         s1.Format(_T("%u"), pchnstat1->CtnLstPkts);
146         m_liststatus1.SetItemText(5, 1 + i, s1);
147         s1.Format(_T("%u"), pchnstat1->MaxCtnLstPkts);
148         m_liststatus1.SetItemText(6, 1 + i, s1);
149         s1.Format(_T("%u (%.3f%%)"), pchnstat1->NotPkgErr, pchnstat1->NotPkgErr * 100.0 / nSendPackets);
150         m_liststatus1.SetItemText(7, 1 + i, s1);
151         //s1.Format(_T("%u (%.2f%%)"), pchnstat1->NoEndErr, pchnstat1->NoEndErr * 100.0 / nSendPackets);
152         //m_liststatus1.SetItemText(8, 1 + i, s1);
153
154         s1.Format(_T("%u (%.3f%%)"), pchnstat1->PkgLenErr, pchnstat1->PkgLenErr * 100.0 / nSendPackets);
155         m_liststatus1.SetItemText(8, 1 + i, s1);
156         s1.Format(_T("%u (%.3f%%)"), pchnstat1->BCCErr, pchnstat1->BCCErr * 100.0 / nSendPackets);
157         m_liststatus1.SetItemText(9, 1 + i, s1);
158         s1.Format(_T("%u (%.3f%%)"), pchnstat1->TimeOutErr, pchnstat1->TimeOutErr * 100.0 / nSendPackets);
159         m_liststatus1.SetItemText(10, 1 + i, s1);
160         s1.Format(_T("%u"), pchnstat1->Delay);
161         m_liststatus1.SetItemText(11, 1 + i, s1);
162         s1.Format(_T("%u"), pchnstat1->MaxDelay);
163         m_liststatus1.SetItemText(12, 1 + i, s1);
164         s1.Format(_T("%u"), pchnstat1->SendTimeInterval);
165         m_liststatus1.SetItemText(13, 1 + i, s1);
166
167
168         s1.Format(_T("%u"), pchnstat1->ClientRecvPkts);
169         m_liststatus1.SetItemText(14, 1 + i, s1);
170         s1.Format(_T("%u"), pchnstat1->ClientSendPkts);
171         m_liststatus1.SetItemText(15, 1 + i, s1);
172         s1.Format(_T("%u"), pchnstat1->ClientNotPktErr);
173         m_liststatus1.SetItemText(16, 1 + i, s1);
174         s1.Format(_T("%u"), pchnstat1->ClientMisIdPkts);
175         m_liststatus1.SetItemText(17, 1 + i, s1);
176 //        s1.Format(_T("%u"), pchnstat1->ClientNoEndErr);
177 //        m_liststatus1.SetItemText(18, 1 + i, s1);
178         s1.Format(_T("%u"), pchnstat1->ClientPkgLenErr);
179         m_liststatus1.SetItemText(18, 1 + i, s1);
180         s1.Format(_T("%u"), pchnstat1->ClientBccErr);
181         m_liststatus1.SetItemText(19, 1 + i, s1);
182         s1.Format(_T("%u"), pchnstat1->ClientTimeOutErr);
183         m_liststatus1.SetItemText(20, 1 + i, s1);
184
185     }
186
187     return 0;
188 }
189
190 void CDialogStatusShow::OnTimer(UINT_PTR nIDEvent)
191 {
192     // TODO: 在此添加消息处理程序代码和/或调用默认值
193     if (nIDEvent ==0)
194     { }
195     else if (nIDEvent == 1)
196     {
197         DoMonitor();
198         UpdateDisplay();
199     }else {}
200     CDialogEx::OnTimer(nIDEvent);
201 }
202
203 void CDialogStatusShow::OnClose()
204 {
205     // TODO: 在此添加消息处理程序代码和/或调用默认值
206     KillTimer(1);
207     GetParams();
208
209     CDialogEx::OnClose();
210 }
211
212
213
214
215 void CDialogStatusShow::OnBnClickedButtonClearStatistics()
216 {
217     // TODO: 在此添加控件通知处理程序代码
218     CMDIFrameWnd  *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
219     CMDIChildWnd  *pChild = (CMDIChildWnd   *)pFrame->GetActiveFrame();
220     CView   *pV = (CView*)pChild->GetActiveView();
221     CMTerm1Doc* pDoc = (CMTerm1Doc *)(pV->GetDocument());
222
223     pDoc->MyKLink1.ClearStatistics(1, 0);
224
225 }