// 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& 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(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 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(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); } }