QuakeGod
2024-12-24 61deef5cdf96cbfdd6ad45be49e80d597c00ca65
提交 | 用户 | 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: 在此处添加实现代码.
61deef 57     m_liststatus1.SetExtendedStyle( LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE | LVS_EX_LABELTIP);
418cb3 58     m_liststatus1.DeleteAllItems();
Q 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
61deef 69     m_liststatus1.InsertColumn(9, _T("子机8"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
Q 70     m_liststatus1.InsertColumn(10, _T("子机9"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
71     m_liststatus1.InsertColumn(11, _T("子机10"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
72     m_liststatus1.InsertColumn(12, _T("子机11"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
73     m_liststatus1.InsertColumn(13, _T("子机12"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
74     m_liststatus1.InsertColumn(14, _T("子机13"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
75     m_liststatus1.InsertColumn(15, _T("子机14"), LVCFMT_LEFT, 128, -1);//LVCFMT_LEFT, LVCFMT_RIGHT, or LVCFMT_CENTER
418cb3 76
Q 77     m_liststatus1.InsertItem(0, _T("状态"));
78     m_liststatus1.InsertItem(1, _T("发送包计数"));
79     m_liststatus1.InsertItem(2, _T("接收包计数"));
80     m_liststatus1.InsertItem(3, _T("发送时间(uS)"));
81     m_liststatus1.InsertItem(4, _T("丢包计数"));
82     m_liststatus1.InsertItem(5, _T("连续丢包"));
83     m_liststatus1.InsertItem(6, _T("最大连续"));
84     m_liststatus1.InsertItem(7, _T("非包计数"));
85     m_liststatus1.InsertItem(8, _T("包长错误"));
86     m_liststatus1.InsertItem(9, _T("校验错误"));
87     m_liststatus1.InsertItem(10, _T("超时错误"));
61deef 88     m_liststatus1.InsertItem(11, _T("返回延迟(mS)"));
Q 89     m_liststatus1.InsertItem(12, _T("最大延迟(mS)"));
90     m_liststatus1.InsertItem(13, _T("循环时间(mS)"));
418cb3 91     m_liststatus1.InsertItem(14, _T("子机接收"));
Q 92     m_liststatus1.InsertItem(15, _T("子机发送"));
93     m_liststatus1.InsertItem(16, _T("子机非包"));
94     m_liststatus1.InsertItem(17, _T("子机非ID"));
95     m_liststatus1.InsertItem(18, _T("子机包长"));
96     m_liststatus1.InsertItem(19, _T("子机校验"));
97     m_liststatus1.InsertItem(20, _T("子机超时"));
61deef 98     m_liststatus1.InsertItem(21, _T("子机超时"));
Q 99     m_liststatus1.InsertItem(22, _T("子机超时"));
100     m_liststatus1.InsertItem(23, _T("子机超时"));
101     m_liststatus1.InsertItem(24, _T("子机超时"));
102     m_liststatus1.InsertItem(25, _T("子机超时"));
103     m_liststatus1.InsertItem(26, _T("子机超时"));
104     m_liststatus1.InsertItem(27, _T("子机超时"));
418cb3 105
Q 106     return 0;
107 }
108
109
110 int CDialogStatusShow::GetParams()
111 {
112     // TODO: 在此处添加实现代码.
113     return 0;
114 }
115
116 int CDialogStatusShow::DoMonitor()
117 {
118     // TODO: 在此处添加实现代码.
119     return 0;
120 }
121
122 int CDialogStatusShow::UpdateDisplay()
123 {
124     CMDIFrameWnd  *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
125     CMDIChildWnd  *pChild = (CMDIChildWnd   *)pFrame->GetActiveFrame();
126     CView   *pV = (CView*)pChild->GetActiveView();
127     CMTerm1Doc* pDoc = (CMTerm1Doc *)(pV->GetDocument());
128
129     // TODO: 在此处添加实现代码.
130     CString s1, s2;
131     int nOffset = 0;
132     KLink1::pChnStat pchnstat1;
133     unsigned int nSendPackets;
61deef 134     int nChilds = 14;
418cb3 135     //子机1  
Q 136     //子机2
61deef 137     for (int i = 0; i <= nChilds; i++)
418cb3 138     {
Q 139         nOffset = 0 + sizeof(KLink1::stChnStat) * i;
140         pchnstat1 = (KLink1::pChnStat)&(pDoc->KBDB[nOffset + 0]);
141         nSendPackets = pchnstat1->SendPackets;
142         if (nSendPackets == 0) nSendPackets = 1;
143         s1.Format(_T("%08X"), pchnstat1->Stat);
144         m_liststatus1.SetItemText(0, 1 + i, s1);
145
146         s1.Format(_T("%u"), pchnstat1->SendPackets);
147         m_liststatus1.SetItemText(1, 1 + i, s1);
148         s1.Format(_T("%u (%.3f%%)"), pchnstat1->RecvPackets, pchnstat1->RecvPackets *100.0 / nSendPackets);
149         m_liststatus1.SetItemText(2, 1 + i, s1);
150         s1.Format(_T("%u"), pchnstat1->LastSentTimeuS);
151         m_liststatus1.SetItemText(3, 1 + i, s1);
152         s1.Format(_T("%u (%.3f%%)"), pchnstat1->LostPackets, pchnstat1->LostPackets *100.0 / nSendPackets);
153         m_liststatus1.SetItemText(4, 1 + i, s1);
154
155         s1.Format(_T("%u"), pchnstat1->CtnLstPkts);
156         m_liststatus1.SetItemText(5, 1 + i, s1);
157         s1.Format(_T("%u"), pchnstat1->MaxCtnLstPkts);
158         m_liststatus1.SetItemText(6, 1 + i, s1);
159         s1.Format(_T("%u (%.3f%%)"), pchnstat1->NotPkgErr, pchnstat1->NotPkgErr * 100.0 / nSendPackets);
160         m_liststatus1.SetItemText(7, 1 + i, s1);
161         //s1.Format(_T("%u (%.2f%%)"), pchnstat1->NoEndErr, pchnstat1->NoEndErr * 100.0 / nSendPackets);
162         //m_liststatus1.SetItemText(8, 1 + i, s1);
163
164         s1.Format(_T("%u (%.3f%%)"), pchnstat1->PkgLenErr, pchnstat1->PkgLenErr * 100.0 / nSendPackets);
165         m_liststatus1.SetItemText(8, 1 + i, s1);
166         s1.Format(_T("%u (%.3f%%)"), pchnstat1->BCCErr, pchnstat1->BCCErr * 100.0 / nSendPackets);
167         m_liststatus1.SetItemText(9, 1 + i, s1);
168         s1.Format(_T("%u (%.3f%%)"), pchnstat1->TimeOutErr, pchnstat1->TimeOutErr * 100.0 / nSendPackets);
169         m_liststatus1.SetItemText(10, 1 + i, s1);
61deef 170         s1.Format(_T("%.1f"), pchnstat1->Delay/10.0f);
418cb3 171         m_liststatus1.SetItemText(11, 1 + i, s1);
61deef 172         s1.Format(_T("%.1f"), pchnstat1->MaxDelay/10.0f);
418cb3 173         m_liststatus1.SetItemText(12, 1 + i, s1);
61deef 174         s1.Format(_T("%.1f"), pchnstat1->SendTimeInterval/10.0f);
418cb3 175         m_liststatus1.SetItemText(13, 1 + i, s1);
Q 176
177
178         s1.Format(_T("%u"), pchnstat1->ClientRecvPkts);
179         m_liststatus1.SetItemText(14, 1 + i, s1);
180         s1.Format(_T("%u"), pchnstat1->ClientSendPkts);
181         m_liststatus1.SetItemText(15, 1 + i, s1);
182         s1.Format(_T("%u"), pchnstat1->ClientNotPktErr);
183         m_liststatus1.SetItemText(16, 1 + i, s1);
184         s1.Format(_T("%u"), pchnstat1->ClientMisIdPkts);
185         m_liststatus1.SetItemText(17, 1 + i, s1);
186 //        s1.Format(_T("%u"), pchnstat1->ClientNoEndErr);
187 //        m_liststatus1.SetItemText(18, 1 + i, s1);
188         s1.Format(_T("%u"), pchnstat1->ClientPkgLenErr);
189         m_liststatus1.SetItemText(18, 1 + i, s1);
190         s1.Format(_T("%u"), pchnstat1->ClientBccErr);
191         m_liststatus1.SetItemText(19, 1 + i, s1);
192         s1.Format(_T("%u"), pchnstat1->ClientTimeOutErr);
193         m_liststatus1.SetItemText(20, 1 + i, s1);
194
195     }
196
197     return 0;
198 }
199
200 void CDialogStatusShow::OnTimer(UINT_PTR nIDEvent)
201 {
202     // TODO: 在此添加消息处理程序代码和/或调用默认值
203     if (nIDEvent ==0)
204     { }
205     else if (nIDEvent == 1)
206     {
207         DoMonitor();
208         UpdateDisplay();
209     }else {}
210     CDialogEx::OnTimer(nIDEvent);
211 }
212
213 void CDialogStatusShow::OnClose()
214 {
215     // TODO: 在此添加消息处理程序代码和/或调用默认值
216     KillTimer(1);
217     GetParams();
218
219     CDialogEx::OnClose();
220 }
221
222 void CDialogStatusShow::OnBnClickedButtonClearStatistics()
223 {
224     // TODO: 在此添加控件通知处理程序代码
225     CMDIFrameWnd  *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
226     CMDIChildWnd  *pChild = (CMDIChildWnd   *)pFrame->GetActiveFrame();
227     CView   *pV = (CView*)pChild->GetActiveView();
228     CMTerm1Doc* pDoc = (CMTerm1Doc *)(pV->GetDocument());
229
61deef 230     theApp.MyKLink1.ClearStatistics(1, 0);
418cb3 231
Q 232 }