From 6dc80508b1c0f431007f8a8c947c152ec00c3d15 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期一, 08 九月 2025 09:24:05 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/CPageGlassList.cpp | 573 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 573 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGlassList.cpp b/SourceCode/Bond/Servo/CPageGlassList.cpp
new file mode 100644
index 0000000..4a35061
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -0,0 +1,573 @@
+锘�// CPageGlassList.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CPageGlassList.h"
+#include "afxdialogex.h"
+#include "GlassJson.h"
+
+
+#define PAGE_SIZE 100
+#define PAGE_BACKGROUND_COLOR RGB(252, 252, 255)
+
+// CPageGlassList 瀵硅瘽妗�
+
+IMPLEMENT_DYNAMIC(CPageGlassList, CDialogEx)
+
+CPageGlassList::CPageGlassList(CWnd* pParent /*=nullptr*/)
+ : CDialogEx(IDD_PAGE_GLASS_LIST, pParent)
+{
+ m_crBkgnd = PAGE_BACKGROUND_COLOR;
+ m_hbrBkgnd = nullptr;
+ m_pObserver = nullptr;
+
+ m_strStatus = "";
+ m_strKeyword = "";
+ m_nCurPage = 0;
+ m_nTotalPages = 0;
+
+ memset(m_szTimeStart, 0, sizeof(m_szTimeStart));
+ memset(m_szTimeEnd, 0, sizeof(m_szTimeEnd));
+ m_szTimeStart[0] = '\0';
+ m_szTimeEnd[0] = '\0';
+}
+
+CPageGlassList::~CPageGlassList()
+{
+ if (m_hbrBkgnd != nullptr) {
+ ::DeleteObject(m_hbrBkgnd);
+ }
+ if (m_pObserver != nullptr) {
+ m_pObserver->unsubscribe();
+ m_pObserver = nullptr;
+ }
+}
+
+void CPageGlassList::DoDataExchange(CDataExchange* pDX)
+{
+ CDialogEx::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_dateTimeStart);
+ DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_dateTimeEnd);
+ DDX_Control(pDX, IDC_LIST_ALARM, m_listCtrl);
+}
+
+
+BEGIN_MESSAGE_MAP(CPageGlassList, CDialogEx)
+ ON_WM_CTLCOLOR()
+ ON_WM_DESTROY()
+ ON_WM_SIZE()
+ ON_WM_TIMER()
+ ON_CBN_SELCHANGE(IDC_COMBO_DATETIME, &CPageGlassList::OnCbnSelchangeComboDatetime)
+ ON_CBN_SELCHANGE(IDC_COMBO_STATUS_FILTER, &CPageGlassList::OnCbnSelchangeComboStatusFilter)
+ ON_BN_CLICKED(IDC_BUTTON_SEARCH, &CPageGlassList::OnBnClickedButtonSearch)
+ ON_BN_CLICKED(IDC_BUTTON_EXPORT, &CPageGlassList::OnBnClickedButtonExport)
+ ON_BN_CLICKED(IDC_BUTTON_PREV_PAGE, &CPageGlassList::OnBnClickedButtonPrevPage)
+ ON_BN_CLICKED(IDC_BUTTON_NEXT_PAGE, &CPageGlassList::OnBnClickedButtonNextPage)
+END_MESSAGE_MAP()
+
+
+// CPageGlassList 娑堟伅澶勭悊绋嬪簭
+void CPageGlassList::InitRxWindow()
+{
+ /* code */
+ // 璁㈤槄鏁版嵁
+ IRxWindows* pRxWindows = RX_GetRxWindows();
+ pRxWindows->enableLog(5);
+ if (m_pObserver == NULL) {
+ m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
+ // onNext
+ pAny->addRef();
+ int code = pAny->getCode();
+
+ if (RX_CODE_EQ_ROBOT_TASK == code) {
+ UpdatePageData();
+ }
+
+ pAny->release();
+ }, [&]() -> void {
+ // onComplete
+ }, [&](IThrowable* pThrowable) -> void {
+ // onErrorm
+ pThrowable->printf();
+ });
+
+ theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())->subscribe(m_pObserver);
+ }
+}
+
+void CPageGlassList::Resize()
+{
+ CRect rcClient;
+ GetClientRect(&rcClient);
+
+ // ===== 甯搁噺瀹氫箟 =====
+ const int nLeft = 12;
+ const int nRight = 12;
+ const int nTop = 58;
+ const int nButtonHeight = 28;
+ const int nButtonMarginBottom = 12;
+ const int nSpacing = 8;
+ const int nButtonWidth = 80;
+ const int nLabelWidth = 100;
+
+ // ===== 鍒嗛〉鎺т欢甯冨眬 =====
+ int yBottom = rcClient.bottom - nButtonMarginBottom - nButtonHeight;
+ int xRight = rcClient.Width() - nRight;
+
+ CWnd* pBtnNext = GetDlgItem(IDC_BUTTON_NEXT_PAGE);
+ CWnd* pBtnPrev = GetDlgItem(IDC_BUTTON_PREV_PAGE);
+ CWnd* pLabelPage = GetDlgItem(IDC_LABEL_PAGE_NUMBER);
+
+ if (pBtnNext && pBtnPrev && pLabelPage) {
+ // 鑾峰彇鍒嗛〉鏂囨湰瀹藉害浼扮畻
+ //CString strLabel;
+ //GetDlgItemText(IDC_LABEL_PAGE_NUMBER, strLabel);
+ //if (strLabel.IsEmpty()) {
+ // strLabel = _T("绗� 1 / 1 椤�");
+ //}
+ //int nCharWidth = 8;
+ //int nLabelWidth = strLabel.GetLength() * nCharWidth + 20;
+
+ // 璁剧疆鎸夐挳鍜屾爣绛句綅缃�
+ pBtnNext->MoveWindow(xRight - nButtonWidth, yBottom, nButtonWidth, nButtonHeight);
+ xRight -= nButtonWidth + nSpacing;
+
+ pLabelPage->MoveWindow(xRight - nLabelWidth, yBottom, nLabelWidth, nButtonHeight);
+ xRight -= nLabelWidth + nSpacing;
+
+ pBtnPrev->MoveWindow(xRight - nButtonWidth, yBottom, nButtonWidth, nButtonHeight);
+ }
+
+ // ===== 琛ㄦ牸鍖哄煙甯冨眬 =====
+ if (nullptr != m_listCtrl.m_hWnd) {
+ int listHeight = yBottom - nTop - nSpacing;
+ m_listCtrl.MoveWindow(nLeft, nTop, rcClient.Width() - nLeft - nRight, listHeight);
+ }
+}
+
+void CPageGlassList::InitStatusCombo()
+{
+ CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_STATUS_FILTER);
+ if (nullptr != pComboBox) {
+ pComboBox->ResetContent();
+ pComboBox->AddString(_T("鍏ㄩ儴"));
+ pComboBox->AddString(_T("Ready"));
+ pComboBox->AddString(_T("Running"));
+ pComboBox->AddString(_T("Error"));
+ pComboBox->AddString(_T("Abort"));
+ pComboBox->AddString(_T("Completed"));
+ pComboBox->SetCurSel(0);
+ }
+}
+
+void CPageGlassList::InitTimeRangeCombo()
+{
+ CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+ if (nullptr != pComboBox) {
+ pComboBox->ResetContent();
+ pComboBox->AddString(_T("涓嶉檺"));
+ pComboBox->AddString(_T("浠婂ぉ"));
+ pComboBox->AddString(_T("涓冨ぉ鍐�"));
+ pComboBox->AddString(_T("鏈湀"));
+ pComboBox->AddString(_T("浠婂勾"));
+ pComboBox->AddString(_T("鑷畾涔�"));
+ pComboBox->SetCurSel(0);
+ }
+}
+
+void CPageGlassList::InitDateTimeControls()
+{
+ if (m_dateTimeStart.m_hWnd == nullptr || m_dateTimeEnd.m_hWnd == nullptr) {
+ return;
+ }
+
+ // 绂佺敤鍒濆鐘舵��
+ m_dateTimeStart.EnableWindow(FALSE);
+ m_dateTimeEnd.EnableWindow(FALSE);
+
+ // 璁剧疆鏍煎紡锛氭樉绀烘棩鏈� + 鏃堕棿
+ //m_dateTimeStart.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));
+ //m_dateTimeEnd.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));
+
+ // 淇敼鏍峰紡浠ユ敮鎸佹椂闂存牸寮�
+ //DWORD dwStyleStart = m_dateTimeStart.GetStyle();
+ //DWORD dwStyleEnd = m_dateTimeEnd.GetStyle();
+
+ //m_dateTimeStart.ModifyStyle(0, DTS_TIMEFORMAT | DTS_UPDOWN);
+ //m_dateTimeEnd.ModifyStyle(0, DTS_TIMEFORMAT);
+}
+
+void CPageGlassList::LoadTransfers()
+{
+ m_nCurPage = 1;
+ UpdatePageData();
+}
+
+void CPageGlassList::UpdatePageData()
+{
+ /*
+ TransferData filter;
+ filter.strStatus = m_strStatus;
+ filter.strDescription = m_strKeyword;
+ filter.strCreateTime = m_szTimeStart;
+ filter.strEndTime = m_szTimeEnd;
+ auto vecData = TransferManager::getInstance().getTransfers(filter, m_nCurPage, PAGE_SIZE);
+ FillDataToListCtrl(vecData);
+
+ int nTotalRecords = TransferManager::getInstance().getFilteredTransferCount(filter);
+ m_nTotalPages = (nTotalRecords + PAGE_SIZE - 1) / PAGE_SIZE;
+ UpdatePageControls();
+ */
+}
+
+void CPageGlassList::UpdatePageControls()
+{
+ CString strPage;
+ strPage.Format(_T("绗� %d / %d 椤�"), m_nCurPage, m_nTotalPages);
+ SetDlgItemText(IDC_LABEL_PAGE_NUMBER, strPage);
+ GetDlgItem(IDC_BUTTON_PREV_PAGE)->EnableWindow(m_nCurPage > 1);
+ GetDlgItem(IDC_BUTTON_NEXT_PAGE)->EnableWindow(m_nCurPage < m_nTotalPages);
+
+ Resize();
+}
+
+void CPageGlassList::UpdateDateFilter()
+{
+ CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+ if (nullptr != pComboBox) {
+ int nIndex = pComboBox->GetCurSel();
+ if (nIndex == 0) {
+ memset(m_szTimeStart, 0, sizeof(m_szTimeStart));
+ memset(m_szTimeEnd, 0, sizeof(m_szTimeEnd));
+ m_szTimeStart[0] = '\0';
+ m_szTimeEnd[0] = '\0';
+ }
+ else {
+ CTime time = CTime::GetCurrentTime();
+ if (nIndex == 1) {
+ sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", time.GetYear(), time.GetMonth(), time.GetDay());
+ sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+ }
+ else if (nIndex == 2) {
+ CTime time2 = time - CTimeSpan(7, 0, 0, 0);
+ sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", time2.GetYear(), time2.GetMonth(), time2.GetDay());
+ sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+ }
+ else if (nIndex == 3) {
+ sprintf_s(m_szTimeStart, 64, "%d-%02d-01 00:00:00", time.GetYear(), time.GetMonth());
+ sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", time.GetYear(), time.GetMonth(), time.GetDay());
+ }
+ else if (nIndex == 4) {
+ sprintf_s(m_szTimeStart, 64, "%d-01-01 00:00:00", time.GetYear());
+ sprintf_s(m_szTimeEnd, 64, "%d-12-31 23:59:59", time.GetYear());
+ }
+ else if (nIndex == 5) {
+ SYSTEMTIME t1, t2;
+ m_dateTimeStart.GetTime(&t1);
+ m_dateTimeEnd.GetTime(&t2);
+ //sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d %02d:%02d:%02d", t1.wYear, t1.wMonth, t1.wDay, t1.wHour, t1.wMinute, t1.wSecond);
+ //sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d %02d:%02d:%02d", t2.wYear, t2.wMonth, t2.wDay, t2.wHour, t2.wMinute, t2.wSecond);
+
+ sprintf_s(m_szTimeStart, 64, "%d-%02d-%02d 00:00:00", t1.wYear, t1.wMonth, t1.wDay);
+ sprintf_s(m_szTimeEnd, 64, "%d-%02d-%02d 23:59:59", t2.wYear, t2.wMonth, t2.wDay);
+ }
+ }
+ }
+}
+
+/*
+void CPageGlassList::FillDataToListCtrl(const std::vector<TransferData>& vecData)
+{
+ if (m_listCtrl.m_hWnd == nullptr) {
+ return;
+ }
+
+ m_listCtrl.DeleteAllItems();
+ for (const auto& item : vecData) {
+ InsertTransferData(item);
+ }
+}
+
+void CPageGlassList::InsertTransferData(const TransferData& data)
+{
+ if (m_listCtrl.m_hWnd == nullptr) {
+ return;
+ }
+
+ int nIndex = m_listCtrl.GetItemCount();
+ if (nIndex < 0) {
+ return;
+ }
+
+ int nItem = m_listCtrl.InsertItem(nIndex, _T(""));
+ CString str;
+ str.Format(_T("%d"), data.nRecordId);
+ m_listCtrl.SetItemText(nItem, 1, str);
+ m_listCtrl.SetItemText(nItem, 2, CString(data.strStatus.c_str()));
+ m_listCtrl.SetItemText(nItem, 3, CString(data.strClassID.c_str()));
+ m_listCtrl.SetItemText(nItem, 4, CString(data.strCreateTime.c_str()));
+ m_listCtrl.SetItemText(nItem, 5, CString(data.strPickTime.c_str()));
+ m_listCtrl.SetItemText(nItem, 6, CString(data.strPlaceTime.c_str()));
+ m_listCtrl.SetItemText(nItem, 7, CString(data.strEndTime.c_str()));
+ m_listCtrl.SetItemText(nItem, 8, CString(data.strDescription.c_str()));
+}
+*/
+// CPageTransferLog 娑堟伅澶勭悊绋嬪簭
+
+BOOL CPageGlassList::OnInitDialog()
+{
+ CDialogEx::OnInitDialog();
+
+ // TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
+ SetTimer(1, 3000, nullptr);
+
+ // 涓嬫媺妗嗘帶浠�
+ InitStatusCombo();
+ InitTimeRangeCombo();
+
+ // 鏃ユ湡鎺т欢
+ InitDateTimeControls();
+
+ // 鎶ヨ〃鎺т欢
+ CString strIniFile, strItem;
+ strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+
+ DWORD dwStyle = m_listCtrl.GetExtendedStyle();
+ dwStyle |= LVS_EX_FULLROWSELECT;
+ dwStyle |= LVS_EX_GRIDLINES;
+ m_listCtrl.SetExtendedStyle(dwStyle);
+
+ HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
+ ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL);
+
+ CString headers[] = {
+ _T(""),
+ _T("Cassette Sequence No"),
+ _T("Job Sequence No"),
+ _T("Class ID"),
+ _T("鐗╂枡绫诲瀷"),
+ _T("鐘舵��"),
+ _T("宸ヨ壓寮�濮嬫椂闂�"),
+ _T("宸ヨ壓缁撴潫鏃堕棿"),
+ _T("閭﹀畾Glass ID"),
+ _T("AOI妫�娴嬬粨鏋�"),
+ _T("璺緞"),
+ _T("宸ヨ壓鍙傛暟")
+ };
+ int widths[] = { 0, 80, 80, 100, 120, 120, 120, 120, 200, 200, 200, 200 };
+ for (int i = 0; i < _countof(headers); ++i) {
+ strItem.Format(_T("Col_%d_Width"), i);
+ widths[i] = GetPrivateProfileInt("GlassListCtrl", strItem, widths[i], strIniFile);
+ m_listCtrl.InsertColumn(i, headers[i], LVCFMT_LEFT, widths[i]);
+ }
+ m_listCtrl.SetColumnWidth(10, LVSCW_AUTOSIZE_USEHEADER);
+
+
+ // 璁$畻鎬婚〉鏁�
+ /*
+ int nTotalRecords = TransferManager::getInstance().getTotalTransferCountAll();
+ m_nTotalPages = (nTotalRecords + PAGE_SIZE - 1) / PAGE_SIZE;
+ m_nCurPage = 1;
+ */
+
+ Resize();
+ LoadTransfers();
+
+ return TRUE; // return TRUE unless you set the focus to a control
+ // 寮傚父: OCX 灞炴�ч〉搴旇繑鍥� FALSE
+}
+
+HBRUSH CPageGlassList::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+ if (nCtlColor == CTLCOLOR_STATIC) {
+ pDC->SetBkColor(m_crBkgnd);
+ }
+
+ if (m_hbrBkgnd == nullptr) {
+ m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
+ }
+
+ return m_hbrBkgnd;
+}
+
+void CPageGlassList::OnDestroy()
+{
+ CDialogEx::OnDestroy();
+ if (m_hbrBkgnd != nullptr) {
+ ::DeleteObject(m_hbrBkgnd);
+ m_hbrBkgnd = nullptr;
+ }
+ if (m_pObserver != nullptr) {
+ m_pObserver->unsubscribe();
+ m_pObserver = nullptr;
+ }
+
+ // 淇濆瓨鍒楀
+ CString strIniFile, strItem, strTemp;
+ strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+ CHeaderCtrl* pHeader = m_listCtrl.GetHeaderCtrl();
+ for (int i = 0; i < pHeader->GetItemCount(); i++) {
+ RECT rect;
+ pHeader->GetItemRect(i, &rect);
+ strItem.Format(_T("Col_%d_Width"), i);
+ strTemp.Format(_T("%d"), rect.right - rect.left);
+ WritePrivateProfileString("GlassListCtrl", strItem, strTemp, strIniFile);
+ }
+}
+
+void CPageGlassList::OnSize(UINT nType, int cx, int cy)
+{
+ CDialogEx::OnSize(nType, cx, cy);
+ Resize();
+}
+
+void CPageGlassList::OnTimer(UINT_PTR nIDEvent)
+{
+ if (nIDEvent == 1) {
+ KillTimer(1);
+ InitRxWindow();
+ }
+ CDialogEx::OnTimer(nIDEvent);
+}
+
+void CPageGlassList::OnCbnSelchangeComboDatetime()
+{
+ CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_DATETIME);
+ int nIndex = pComboBox->GetCurSel();
+ int nCount = pComboBox->GetCount();
+ m_dateTimeStart.EnableWindow(nIndex == nCount - 1);
+ m_dateTimeEnd.EnableWindow(nIndex == nCount - 1);
+
+ // 鏇存柊鏃ユ湡杩囨护鍣ㄥ拰椤甸潰鏁版嵁
+ UpdateDateFilter();
+ LoadTransfers();
+}
+
+void CPageGlassList::OnCbnSelchangeComboStatusFilter()
+{
+ CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_STATUS_FILTER);
+ int nIndex = pComboBox->GetCurSel();
+ if (nIndex == 0) {
+ m_strStatus.clear();
+ }
+ else {
+ CString cstrText;
+ pComboBox->GetLBText(nIndex, cstrText);
+ m_strStatus = CT2A(cstrText);
+ }
+ LoadTransfers();
+}
+
+void CPageGlassList::OnBnClickedButtonSearch()
+{
+ // 鑾峰彇鍏抽敭瀛楄緭鍏ユ鍐呭
+ CString strKeyword;
+ GetDlgItemText(IDC_EDIT_KEYWORD, strKeyword);
+ m_strKeyword = CT2A(strKeyword);
+
+ // 鏇存柊鏃ユ湡杩囨护鍣ㄥ拰椤甸潰鏁版嵁
+ UpdateDateFilter();
+ LoadTransfers();
+}
+
+void CPageGlassList::OnBnClickedButtonExport()
+{
+ CFileDialog fileDialog(FALSE, _T("csv"), NULL, OFN_HIDEREADONLY, _T("CSV Files (*.csv)|*.csv||"));
+ if (fileDialog.DoModal() != IDOK) {
+ return;
+ }
+
+ CStdioFile file;
+ if (!file.Open(fileDialog.GetPathName(), CFile::modeCreate | CFile::modeWrite | CFile::typeText)) {
+ AfxMessageBox(_T("鍒涘缓鏂囦欢澶辫触锛�"));
+ return;
+ }
+
+ CString strHeader = _T("浠诲姟ID,鐘舵��,ClassID,鍒涘缓鏃堕棿,鍙栫墖鏃堕棿,鏀剧墖鏃堕棿,缁撴潫鏃堕棿,鎻忚堪\n");
+ file.WriteString(strHeader);
+
+ for (int i = 0; i < m_listCtrl.GetItemCount(); ++i) {
+ CString row;
+ for (int j = 1; j <= 8; ++j) {
+ row += m_listCtrl.GetItemText(i, j);
+ if (j != 8) {
+ row += ",";
+ }
+ }
+ row += "\n";
+ file.WriteString(row);
+ }
+ file.Close();
+}
+
+void CPageGlassList::OnBnClickedButtonPrevPage()
+{
+ SERVO::CGlass g;
+ g.setID("GLS-001");
+ g.setType(SERVO::MaterialsType::G1);
+ g.setOriginPort(1, 5);
+ g.setScheduledForProcessing(TRUE);
+ g.m_failReason = "none";
+ g.markQueued();
+ g.markStart();
+
+
+ // 娣诲姞鍙傛暟
+ CParam p1("鏍℃瀵逛綅寤舵椂", "P001", "ms", 123);
+ CParam p2("娓╁害", "P002", "degC", 25.5);
+ g.getParams().push_back(p1);
+ g.getParams().push_back(p2);
+
+ // 璁剧疆 JobDataS
+ SERVO::CJobDataS* js = g.getJobDataS();
+ js->setCassetteSequenceNo(10);
+ js->setJobSequenceNo(20);
+ js->setLotId("LOT-ABC");
+ js->setGlass1Id("GLS-001");
+
+ // 娣诲姞 Path
+ g.addPath(100, 1);
+ SERVO::CPath* tail = g.getPath()->getTailPath();
+ tail->setInTime(111111);
+ tail->setOutTime(222222);
+ tail->setInspResult(SERVO::InspResult::Pass);
+ tail->processEnd();
+ return;
+ // 2. 杞负 JSON
+ std::string jsonText = GlassJson::ToPrettyString(g);
+ TRACE("搴忓垪鍖栫粨鏋�:\n%s\n\n", jsonText.c_str());
+
+ // 3. 鍙嶅簭鍒楀寲
+ SERVO::CGlass g2;
+ std::string err;
+ if (!GlassJson::FromString(jsonText, g2, &err)) {
+ TRACE("瑙f瀽澶辫触: %s\n", err.c_str());
+ return;
+ }
+
+ // 4. 鎵撳嵃楠岃瘉
+ TRACE("鍙嶅簭鍒楀寲鍚庣殑ID: %s\n", g2.getID().c_str());
+ TRACE("鍙嶅簭鍒楀寲鍚庣殑鍙傛暟鏁伴噺: %d\n", (int)g2.getParams().size());
+ if (!g2.getParams().empty()) {
+ TRACE("绗竴涓弬鏁板悕: %s 鍊�=%d\n",
+ g2.getParams()[0].getName().c_str(),
+ g2.getParams()[0].getIntValue());
+ }
+
+
+
+ if (m_nCurPage > 1) {
+ m_nCurPage--;
+ UpdatePageData();
+ }
+
+}
+
+void CPageGlassList::OnBnClickedButtonNextPage()
+{
+ if (m_nCurPage < m_nTotalPages) {
+ m_nCurPage++;
+ UpdatePageData();
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3