SourceCode/Bond/Servo/CEquipmentPage2.cpp
@@ -24,10 +24,16 @@
void CEquipmentPage2::DoDataExchange(CDataExchange* pDX)
{
   CHMPropertyPage::DoDataExchange(pDX);
   DDX_Control(pDX, IDC_LIST1, m_listCtrl);
}
BEGIN_MESSAGE_MAP(CEquipmentPage2, CHMPropertyPage)
   ON_WM_CTLCOLOR()
   ON_WM_DESTROY()
   ON_WM_SIZE()
   ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CEquipmentPage2::OnLvnItemchangedList1)
   ON_BN_CLICKED(IDC_BUTTON_REMOVE, &CEquipmentPage2::OnBnClickedButtonRemove)
END_MESSAGE_MAP()
@@ -35,7 +41,6 @@
void CEquipmentPage2::OnApply()
{
   __super::OnApply();
   AfxMessageBox("CEquipmentPage2::OnApply()");
}
void CEquipmentPage2::setEquipment(SERVO::CEquipment* pEquipment)
@@ -48,8 +53,140 @@
{
   CHMPropertyPage::OnInitDialog();
   AfxMessageBox(m_pEquipment->getClassName());
   // 读出列宽
   CString strIniFile, strItem;
   strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
   int width[8] = { 0, 218, 180, 180, 180, 180, 180, 180 };
   for (int i = 0; i < 8; i++) {
      strItem.Format(_T("Col_%d_Width"), i);
      width[i] = GetPrivateProfileInt("EquipmentPage2ListCtrl", strItem, width[i], strIniFile);
   }
   // 报表控件
   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);
   m_listCtrl.InsertColumn(0, _T(""), LVCFMT_RIGHT, width[0]);
   m_listCtrl.InsertColumn(1, _T("ID"), LVCFMT_LEFT, width[1]);
   m_listCtrl.InsertColumn(2, _T("名称"), LVCFMT_LEFT, width[2]);
   m_listCtrl.InsertColumn(3, _T("Glass ID"), LVCFMT_LEFT, width[3]);
   m_listCtrl.InsertColumn(4, _T("贴合Glass ID"), LVCFMT_LEFT, width[4]);
   m_listCtrl.InsertColumn(5, _T("时间"), LVCFMT_LEFT, width[5]);
   m_listCtrl.SetColumnWidth(5, LVSCW_AUTOSIZE_USEHEADER);
   ASSERT(m_pEquipment);
   UpdateSlots();
   return TRUE;  // return TRUE unless you set the focus to a control
              // 异常: OCX 属性页应返回 FALSE
}
HBRUSH CEquipmentPage2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
   // TODO:  在此更改 DC 的任何特性
   // TODO:  如果默认的不是所需画笔,则返回另一个画笔
   return hbr;
}
void CEquipmentPage2::OnDestroy()
{
   CHMPropertyPage::OnDestroy();
   // 保存列宽
   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("EquipmentPage2ListCtrl", strItem, strTemp, strIniFile);
   }
}
void CEquipmentPage2::OnSize(UINT nType, int cx, int cy)
{
   CHMPropertyPage::OnSize(nType, cx, cy);
   if (GetDlgItem(IDC_LIST1) == nullptr) return;
   CWnd* pItem;
   CRect rcClient, rcItem;
   GetClientRect(&rcClient);
   int x = 12;
   int y2 = rcClient.bottom - 12;
   pItem = GetDlgItem(IDC_BUTTON_REMOVE);
   pItem->GetWindowRect(&rcItem);
   pItem->MoveWindow(x, y2 - rcItem.Height(), rcItem.Width(), rcItem.Height());
   y2 -= rcItem.Height();
   y2 -= 8;
   m_listCtrl.MoveWindow(x, 58, rcClient.Width() - 24, y2 - 58);
}
void CEquipmentPage2::OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
   if (LVIF_STATE == pNMLV->uChanged) {
      int nItem = pNMLV->iItem;
      GetDlgItem(IDC_BUTTON_REMOVE)->EnableWindow(GetSelectedItemIndex() >= 0);
   }
   *pResult = 0;
}
int CEquipmentPage2::GetSelectedItemIndex()
{
   POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
   return m_listCtrl.GetNextSelectedItem(pos);
}
void CEquipmentPage2::OnBnClickedButtonRemove()
{
   int index = GetSelectedItemIndex();
   if (index >= 0) {
      SERVO::CSlot* pSlot = (SERVO::CSlot*)m_listCtrl.GetItemData(index);
      ASSERT(pSlot);
      int bRet = m_pEquipment->removeGlass(pSlot->getNo());
      if (bRet == 0) {
         UpdateSlots();
      }
   }
}
void CEquipmentPage2::UpdateSlots()
{
   m_listCtrl.DeleteAllItems();
   for (int i = 0; i < SLOT_MAX; i++) {
      SERVO::CSlot* pSlot = m_pEquipment->getSlot(i);
      if (pSlot != nullptr && pSlot->isEnable()) {
         int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), _T(""));
         m_listCtrl.SetItemData(index, (DWORD_PTR)pSlot);
         m_listCtrl.SetItemText(index, 1, std::to_string(pSlot->getNo()).c_str());
         m_listCtrl.SetItemText(index, 2, pSlot->getName().c_str());
         SERVO::CGlass* pGlass = (SERVO::CGlass*)pSlot->getContext();
         if (pGlass != nullptr) {
            m_listCtrl.SetItemText(index, 3, pGlass->getID().c_str());
            SERVO::CGlass* pBuddy = pGlass->getBuddy();
            if (pBuddy != nullptr) {
               m_listCtrl.SetItemText(index, 4, pBuddy->getID().c_str());
            }
         }
      }
   }
}