#include "stdafx.h" #include "CXLFSDlg.h" #include "resource.h" #include "UITools.h" #include "XSXLDlg.h" namespace { DWORD colorIdx2RGB(int &clr) { AcCmColor color; color.setColorIndex(clr); return RGB(color.red(), color.green(), color.blue()); } } IMPLEMENT_DYNAMIC(CXLFSDlg, CDialog) CXLFSDlg::CXLFSDlg(PIPECABLE::Cabling &cabling, LPCTSTR pszTitle, CWnd* pParent) : CDialog(IDD_XLFS_DLG, pParent) , m_cabling(cabling) , m_sTitle(pszTitle) { m_cabling.sort(); } CXLFSDlg::~CXLFSDlg() { } void CXLFSDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_ctrlList); } BOOL CXLFSDlg::OnInitDialog() { CDialog::OnInitDialog(); initList(); refreshList(); SetWindowText(m_sTitle); return TRUE; } void CXLFSDlg::initList() { m_ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_ctrlList.InsertColumn(0, _T("位置(层)"), LVCFMT_CENTER, 60); m_ctrlList.InsertColumn(1, _T("数目(条)"), LVCFMT_CENTER, 60); m_ctrlList.InsertColumn(2, _T("间距(毫米)"), LVCFMT_CENTER, 80); m_ctrlList.InsertColumn(3, _T("外径(毫米)"), LVCFMT_CENTER, 80); m_ctrlList.InsertColumn(4, _T("曲率半径(毫米)"), LVCFMT_CENTER, 100); m_ctrlList.InsertColumn(5, _T("颜色"), LVCFMT_CENTER, 40); m_ctrlList.InsertColumn(6, _T("线型"), LVCFMT_CENTER, 100); m_ctrlList.InsertColumn(7, _T("型号"), LVCFMT_CENTER, 150); m_ctrlList.InsertColumn(8, _T("厂家"), LVCFMT_CENTER, 150); } void CXLFSDlg::refreshList() { m_ctrlList.DeleteAllItems(); int nRow(0), prec(1); for (size_t i = 0; i < m_cabling.m_cables.size(); ++i) { PIPECABLE::SubCabling &sc(m_cabling.m_cables[i]); nRow = m_ctrlList.InsertItem(0, TypeConvert::i2s(sc.m_nFloor)); m_ctrlList.SetItemText(nRow, 1, sc.m_bValid ? (LPCTSTR)TypeConvert::i2s(sc.m_nCount) : _T("---")); m_ctrlList.SetItemText(nRow, 2, sc.m_bValid ? (LPCTSTR)TypeConvert::f2s(sc.m_dSpace, &prec) : _T("---")); m_ctrlList.SetItemText(nRow, 3, sc.m_bValid ? (LPCTSTR)TypeConvert::f2s(sc.m_dD, &prec) : _T("---")); m_ctrlList.SetItemText(nRow, 4, sc.m_bValid ? (LPCTSTR)TypeConvert::f2s(sc.m_dDn, &prec) : _T("---")); m_ctrlList.SetItemText(nRow, 5, sc.m_bValid ? (LPCTSTR)TypeConvert::i2s(sc.m_nClr) : _T("---")); m_ctrlList.SetItemText(nRow, 6, sc.m_bValid ? (LPCTSTR)sc.m_linetype : _T("---")); m_ctrlList.SetItemText(nRow, 7, sc.m_bValid ? (LPCTSTR)sc.m_sModel : _T("---")); m_ctrlList.SetItemText(nRow, 8, sc.m_bValid ? (LPCTSTR)sc.m_sFactory : _T("---")); m_ctrlList.SetItemData(nRow, (DWORD_PTR)&sc); } } BEGIN_MESSAGE_MAP(CXLFSDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON1, &CXLFSDlg::OnBnClickedModify) ON_BN_CLICKED(IDC_BUTTON2, &CXLFSDlg::OnBnClickedDelete) ON_BN_CLICKED(IDOK, &CXLFSDlg::OnBnClickedOk) ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CXLFSDlg::OnNMDblclkList1) END_MESSAGE_MAP() void CXLFSDlg::OnBnClickedModify() { int nRow = m_ctrlList.GetSelectionMark(); if (nRow == -1) { AfxMessageBox(_T("请选择一行数据。")); return; } if (nRow >= m_cabling.m_cables.size()) return; PIPECABLE::SubCabling &sc(*(PIPECABLE::SubCabling*)m_ctrlList.GetItemData(nRow)); CXSXLDlg dlg; if (sc.m_bValid) // 如果有效,则取出所有数据 dlg.m_data = sc; else // 如无效,则只要层号 dlg.m_data.m_nFloor = sc.m_nFloor; if (dlg.DoModal() != IDOK) return; sc = dlg.m_data; refreshList(); } void CXLFSDlg::OnBnClickedDelete() { int nRow = m_ctrlList.GetSelectionMark(); if (nRow == -1) { AfxMessageBox(_T("请选择一行数据。")); return; } if (nRow >= m_cabling.m_cables.size()) return; PIPECABLE::SubCabling &sc(*(PIPECABLE::SubCabling*)m_ctrlList.GetItemData(nRow)); sc.m_bValid = false; refreshList(); } void CXLFSDlg::OnBnClickedOk() { CDialog::OnOK(); } void CXLFSDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); *pResult = 0; OnBnClickedModify(); }