LAPTOP-SNT8I5JK\Boounion
2025-05-15 48d848201d91187c21d015ed54c0e5e81ceb2c66
SourceCode/Bond/Servo/PageRecipe.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,184 @@
// CPageRecipe.cpp: å®žçŽ°æ–‡ä»¶
//
#include "stdafx.h"
#include "Servo.h"
#include "afxdialogex.h"
#include "PageRecipe.h"
#include "SECSRuntimeManager.h"
// CPageRecipe å¯¹è¯æ¡†
IMPLEMENT_DYNAMIC(CPageRecipe, CDialogEx)
CPageRecipe::CPageRecipe(CWnd* pParent /*=nullptr*/)
   : CDialogEx(IDD_PAGE_RECIPE, pParent)
{
}
CPageRecipe::~CPageRecipe()
{
}
void CPageRecipe::FillDataToListCtrl(const std::vector<std::string>& vecData) {
   CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_PPID);
   if (pListCtrl == nullptr || pListCtrl->m_hWnd == nullptr) {
      return;
   }
   // æ¸…空当前CListCtrl中的所有项
   pListCtrl->DeleteAllItems();
   // éåŽ†æ•°æ®å¹¶æ’å…¥åˆ°CListCtrl中
   for (int i = 0; i < static_cast<int>(vecData.size()); ++i) {
      // æ’入行
      pListCtrl->InsertItem(i, _T(""));
      // è®¾ç½® Recipe No(第1列)
      CString strRecipeNo;
      strRecipeNo.Format(_T("%d"), i);
      pListCtrl->SetItemText(i, 1, strRecipeNo);
      // è®¾ç½® PPID(第2列)
      CString strPPID = CA2T(vecData[i].c_str());
      if (strPPID.CompareNoCase(_T("NULL")) == 0) {
         strPPID.Empty();
      }
      pListCtrl->SetItemText(i, 2, strPPID);
   }
   // èŽ·å–åˆ—æ•°
   int nColCount = pListCtrl->GetHeaderCtrl()->GetItemCount();
   pListCtrl->SetColumnWidth(nColCount - 1, LVSCW_AUTOSIZE_USEHEADER);
}
void CPageRecipe::DoDataExchange(CDataExchange* pDX)
{
   CDialogEx::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_LIST_PPID, m_listPPID);
   DDX_Control(pDX, IDC_EDIT_PPID, m_editPPID);
}
BEGIN_MESSAGE_MAP(CPageRecipe, CDialogEx)
   ON_BN_CLICKED(IDC_BUTTON_SEARCH, &CPageRecipe::OnBnClickedButtonSearch)
   ON_BN_CLICKED(IDC_BUTTON_MODIFY, &CPageRecipe::OnBnClickedButtonModify)
   ON_BN_CLICKED(IDC_BUTTON_DELETE, &CPageRecipe::OnBnClickedButtonDelete)
   ON_BN_CLICKED(IDC_BUTTON_DELETE_ALL, &CPageRecipe::OnBnClickedButtonDeleteAll)
   ON_BN_CLICKED(IDC_BUTTON_SAVE, &CPageRecipe::OnBnClickedButtonSave)
   ON_BN_CLICKED(IDC_BUTTON_REFRESH, &CPageRecipe::OnBnClickedButtonRefresh)
   ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_PPID, &CPageRecipe::OnLvnItemChangedListPPID)
END_MESSAGE_MAP()
// CPageRecipe æ¶ˆæ¯å¤„理程序
BOOL CPageRecipe::OnInitDialog()
{
   CDialogEx::OnInitDialog();
   // TODO:  åœ¨æ­¤æ·»åŠ é¢å¤–çš„åˆå§‹åŒ–
   CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST_PPID);
   DWORD dwStyle = pListCtrl->GetExtendedStyle();
   dwStyle |= LVS_EX_FULLROWSELECT;
   dwStyle |= LVS_EX_GRIDLINES;
   pListCtrl->SetExtendedStyle(dwStyle);
   HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
   ListView_SetImageList(pListCtrl->GetSafeHwnd(), imageList, LVSIL_SMALL);
   pListCtrl->InsertColumn(0, _T(""), LVCFMT_RIGHT, 0);
   pListCtrl->InsertColumn(1, _T("Recipe No"), LVCFMT_LEFT, 100);
   pListCtrl->InsertColumn(2, _T("PPID"), LVCFMT_LEFT, 100);
   pListCtrl->SetColumnWidth(2, LVSCW_AUTOSIZE_USEHEADER);
   // èŽ·å–æ‰€æœ‰æ•°æ®
   auto vecData = SECSRuntimeManager::getInstance().getAllPPID();
   FillDataToListCtrl(vecData);
   return TRUE;  // return TRUE unless you set the focus to a control
   // å¼‚常: OCX å±žæ€§é¡µåº”返回 FALSE
}
void CPageRecipe::OnBnClickedButtonSearch()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   CString strInput;
   m_editPPID.GetWindowText(strInput);
   int nCount = m_listPPID.GetItemCount();
   for (int i = 0; i < nCount; ++i) {
      CString strItemText = m_listPPID.GetItemText(i, 2); // ç¬¬2列为PPID
      if (strItemText == strInput) {
         m_listPPID.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
         m_listPPID.EnsureVisible(i, FALSE);
         break;
      }
   }
}
void CPageRecipe::OnBnClickedButtonModify()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   POSITION pos = m_listPPID.GetFirstSelectedItemPosition();
   if (!pos) return;
   int nSel = m_listPPID.GetNextSelectedItem(pos);
   CString strNewPPID;
   m_editPPID.GetWindowText(strNewPPID);
   m_listPPID.SetItemText(nSel, 2, strNewPPID);
}
void CPageRecipe::OnBnClickedButtonDelete()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   POSITION pos = m_listPPID.GetFirstSelectedItemPosition();
   if (!pos) return;
   int nSel = m_listPPID.GetNextSelectedItem(pos);
   m_listPPID.SetItemText(nSel, 2, _T(""));
}
void CPageRecipe::OnBnClickedButtonDeleteAll()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   int nCount = m_listPPID.GetItemCount();
   for (int i = 0; i < nCount; ++i) {
      m_listPPID.SetItemText(i, 2, _T(""));
   }
}
void CPageRecipe::OnBnClickedButtonSave()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   std::vector<std::string> vecPPID;
   int nCount = m_listPPID.GetItemCount();
   for (int i = 0; i < nCount; ++i) {
      CString str = m_listPPID.GetItemText(i, 2);
      vecPPID.emplace_back(CT2A(str));
   }
   SECSRuntimeManager::getInstance().setAllPPID(vecPPID);
}
void CPageRecipe::OnBnClickedButtonRefresh()
{
   // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
   auto vecData = SECSRuntimeManager::getInstance().getAllPPID();
   FillDataToListCtrl(vecData);
}
void CPageRecipe::OnLvnItemChangedListPPID(NMHDR* pNMHDR, LRESULT* pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
   *pResult = 0;
   if ((pNMLV->uChanged & LVIF_STATE) &&
      (pNMLV->uNewState & LVIS_SELECTED)) {
      int nItem = pNMLV->iItem;
      CString strPPID = m_listPPID.GetItemText(nItem, 2);
      m_editPPID.SetWindowText(strPPID);
   }
}