// SanitaryDangDlg.cpp : implementation file // #include "stdafx.h" #include "SanitaryDangDlg.h" //zxl 2013.06.03 add int ISetRoomV() { CTemporaryResourceOverride vTemp; CSanitaryDangDlg dlg; dlg.m_bMultSel = TRUE; if (dlg.DoModal() != IDOK) { return RTERROR; } if (acedRetStr(dlg.m_csNg) == RTNORM) { return RTNORM; } return RTNORM; } #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // zxl 2013.12.31 add TGridSanitary::TGridSanitary() { AppendCol(_T("数量"), 28); AppendCol(_T("名称"), 109); SetNoPaste(); GetCol(1).SetReadOnly(true); SetColPosFix(); SetColFixLength(); SetNoPaste(); FitLastCol(); } bool TGridSanitary::OnBeforeDeleteRow() { WPARAM a = -1; LPARAM b = -1; GetParent()->SendMessage(WM_add_event_ok,a,b); return 0; } bool TGridSanitary::OnModified(WDGridCell&cell, CString &text) { if (cell.GetCol().GetIndex() == 0) { double dVal = _tstof(text); if (dVal <= 0.0 || !GlobalFunc::IsStrAllNum(text) || text.Find(_T('.')) > 0) { return false; } WPARAM a = cell.GetRow().GetIndex(); LPARAM b = _tstof(text); GetParent()->SendMessage(WM_add_event_ok,a,b);// 向主窗口发送修改命令,a为修改的行号,b为修改之后的数字 } return true; } ///////////////////////////////////////////////////////////////////////////// // CSanitaryDangDlg dialog CSanitaryDangDlg::CSanitaryDangDlg(CWnd* pParent /*=NULL*/) : CDialog(CSanitaryDangDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSanitaryDangDlg) m_csNg = _T(""); m_nBigQ = 0.0; m_nAllQ = 0.0; //}}AFX_DATA_INIT m_iMode = 0; m_nRet = 0; m_nRet2 = 0; m_bMultSel = FALSE; } void CSanitaryDangDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSanitaryDangDlg) //DDX_Control(pDX, IDC_LIST_SEL, m_listSel); DDX_Control(pDX, IDC_LIST_DANG, m_listCtrl); DDX_Text(pDX, IDC_EDIT_NG, m_csNg); DDX_Text(pDX, IDC_EDIT_Q, m_nBigQ); DDX_Text(pDX, IDC_EDIT_ALLQ, m_nAllQ); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSanitaryDangDlg, CDialog) //{{AFX_MSG_MAP(CSanitaryDangDlg) ON_NOTIFY(NM_DBLCLK, IDC_LIST_DANG, OnDblclkListDang) ON_BN_CLICKED(IDC_BUTTON_CLEANUP, OnButtonCleanup) ON_REGISTERED_MESSAGE(WM_add_event_ok,Onadd_event_ok) ON_COMMAND(ID_DELETE, Delete) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSanitaryDangDlg message handlers BOOL CSanitaryDangDlg::OnInitDialog() { CDialog::OnInitDialog(); m_listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // m_listSel.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // m_listSel.InsertColumn ( 0, _T("数量"), LVCFMT_LEFT, 40 ); // m_listSel.InsertColumn ( 1, _T("名称"), LVCFMT_LEFT, 110 ); m_listSel.Clear(); m_listSel.Create(this, IDC_LIST_SEL); m_listSel.SetNoAppendButton(TRUE); m_listSel.SetNoDefaultMenu(true); if(!m_bMultSel){ CRect rect; this->GetWindowRect(&rect); rect.right -= 168; this->MoveWindow(&rect); } if(m_iMode == 0){ m_listCtrl.InsertColumn ( 0, _T("给水配件名称"), LVCFMT_LEFT, 165 ); m_listCtrl.InsertColumn ( 1, _T("额定流量(L/s)"), LVCFMT_LEFT, 90 ); m_listCtrl.InsertColumn ( 2, _T("当量"), LVCFMT_LEFT, 60 ); m_listCtrl.InsertColumn ( 3, _T("管径(mm)"), LVCFMT_LEFT, 60 ); m_listCtrl.InsertColumn ( 4, _T("工作压力(MPa)"), LVCFMT_LEFT, 90 ); m_listCtrl.InsertItem ( 0, _T("洗涤盆、拖布盆、盥洗槽(15mm)"), 0 ); m_listCtrl.SetItemText ( 0, 1, _T("0.15~0.2")); m_listCtrl.SetItemText ( 0, 2, _T("0.75~1")); m_listCtrl.SetItemText ( 0, 3, _T("15")); m_listCtrl.SetItemText ( 0, 4, _T("0.05")); m_listCtrl.InsertItem ( 1, _T("洗涤盆、拖布盆、盥洗槽(20mm)"), 0 ); m_listCtrl.SetItemText ( 1, 1, _T("0.3~0.4")); m_listCtrl.SetItemText ( 1, 2, _T("1.5~2")); m_listCtrl.SetItemText ( 1, 3, _T("20")); m_listCtrl.SetItemText ( 1, 4, _T("0.05")); m_listCtrl.InsertItem ( 2, _T("洗脸盆"), 0 ); m_listCtrl.SetItemText ( 2, 1, _T("0.15")); m_listCtrl.SetItemText ( 2, 2, _T("0.75")); m_listCtrl.SetItemText ( 2, 3, _T("15")); m_listCtrl.SetItemText ( 2, 4, _T("0.05")); m_listCtrl.InsertItem ( 3, _T("洗手盆"), 0 ); m_listCtrl.SetItemText ( 3, 1, _T("0.1")); m_listCtrl.SetItemText ( 3, 2, _T("0.5")); m_listCtrl.SetItemText ( 3, 3, _T("15")); m_listCtrl.SetItemText ( 3, 4, _T("0.05")); m_listCtrl.InsertItem ( 4, _T("浴盆"), 0 ); m_listCtrl.SetItemText ( 4, 1, _T("0.2")); m_listCtrl.SetItemText ( 4, 2, _T("1")); m_listCtrl.SetItemText ( 4, 3, _T("15")); m_listCtrl.SetItemText ( 4, 4, _T("0.05")); m_listCtrl.InsertItem ( 5, _T("淋浴器"), 0 ); m_listCtrl.SetItemText ( 5, 1, _T("0.15")); m_listCtrl.SetItemText ( 5, 2, _T("0.75")); m_listCtrl.SetItemText ( 5, 3, _T("15")); m_listCtrl.SetItemText ( 5, 4, _T("0.05~0.1")); m_listCtrl.InsertItem ( 6, _T("大便器(冲洗水箱浮球阀)"), 0 ); m_listCtrl.SetItemText ( 6, 1, _T("0.1")); m_listCtrl.SetItemText ( 6, 2, _T("0.5")); m_listCtrl.SetItemText ( 6, 3, _T("15")); m_listCtrl.SetItemText ( 6, 4, _T("0.02")); m_listCtrl.InsertItem ( 7, _T("大便器(延时自闭式冲洗阀)"), 0 ); m_listCtrl.SetItemText ( 7, 1, _T("1.2")); m_listCtrl.SetItemText ( 7, 2, _T("6")); m_listCtrl.SetItemText ( 7, 3, _T("25")); m_listCtrl.SetItemText ( 7, 4, _T("0.1~0.15")); m_listCtrl.InsertItem ( 8, _T("小便器"), 0 ); m_listCtrl.SetItemText ( 8, 1, _T("0.1")); m_listCtrl.SetItemText ( 8, 2, _T("0.5")); m_listCtrl.SetItemText ( 8, 3, _T("15")); m_listCtrl.SetItemText ( 8, 4, _T("0.05")); m_listCtrl.InsertItem ( 9, _T("小便槽穿孔冲洗管(每米)"), 0 ); m_listCtrl.SetItemText ( 9, 1, _T("0.05")); m_listCtrl.SetItemText ( 9, 2, _T("0.25")); m_listCtrl.SetItemText ( 9, 3, _T("15~20")); m_listCtrl.SetItemText ( 9, 4, _T("0.015")); m_listCtrl.InsertItem ( 10, _T("净身盆冲洗水嘴"), 0 ); m_listCtrl.SetItemText ( 10, 1, _T("0.1")); m_listCtrl.SetItemText ( 10, 2, _T("0.5")); m_listCtrl.SetItemText ( 10, 3, _T("15")); m_listCtrl.SetItemText ( 10, 4, _T("0.05")); m_listCtrl.InsertItem ( 11, _T("医院倒便器"), 0 ); m_listCtrl.SetItemText ( 11, 1, _T("0.2")); m_listCtrl.SetItemText ( 11, 2, _T("1")); m_listCtrl.SetItemText ( 11, 3, _T("15")); m_listCtrl.SetItemText ( 11, 4, _T("0.05")); m_listCtrl.InsertItem ( 12, _T("实验室化验水嘴(单联)"), 0 ); m_listCtrl.SetItemText ( 12, 1, _T("0.07")); m_listCtrl.SetItemText ( 12, 2, _T("0.35")); m_listCtrl.SetItemText ( 12, 3, _T("15")); m_listCtrl.SetItemText ( 12, 4, _T("0.02")); m_listCtrl.InsertItem ( 13, _T("实验室化验水嘴(双联)"), 0 ); m_listCtrl.SetItemText ( 13, 1, _T("0.15")); m_listCtrl.SetItemText ( 13, 2, _T("0.75")); m_listCtrl.SetItemText ( 13, 3, _T("15")); m_listCtrl.SetItemText ( 13, 4, _T("0.02")); m_listCtrl.InsertItem ( 14, _T("实验室化验水嘴(三联)"), 0 ); m_listCtrl.SetItemText ( 14, 1, _T("0.2")); m_listCtrl.SetItemText ( 14, 2, _T("1")); m_listCtrl.SetItemText ( 14, 3, _T("15")); m_listCtrl.SetItemText ( 14, 4, _T("0.02")); m_listCtrl.InsertItem ( 15, _T("饮水器喷嘴"), 0 ); m_listCtrl.SetItemText ( 15, 1, _T("0.05")); m_listCtrl.SetItemText ( 15, 2, _T("0.25")); m_listCtrl.SetItemText ( 15, 3, _T("15")); m_listCtrl.SetItemText ( 15, 4, _T("0.05")); m_listCtrl.InsertItem ( 16, _T("洒水拴(20mm)"), 0 ); m_listCtrl.SetItemText ( 16, 1, _T("0.4")); m_listCtrl.SetItemText ( 16, 2, _T("2")); m_listCtrl.SetItemText ( 16, 3, _T("20")); m_listCtrl.SetItemText ( 16, 4, _T("0.05~0.1")); m_listCtrl.InsertItem ( 17, _T("洒水拴(25mm)"), 0 ); m_listCtrl.SetItemText ( 17, 1, _T("0.7")); m_listCtrl.SetItemText ( 17, 2, _T("3.5")); m_listCtrl.SetItemText ( 17, 3, _T("25")); m_listCtrl.SetItemText ( 17, 4, _T("0.05~0.1")); m_listCtrl.InsertItem ( 18, _T("室内地面冲洗水嘴"), 0 ); m_listCtrl.SetItemText ( 18, 1, _T("0.2")); m_listCtrl.SetItemText ( 18, 2, _T("1")); m_listCtrl.SetItemText ( 18, 3, _T("15")); m_listCtrl.SetItemText ( 18, 4, _T("0.05")); m_listCtrl.InsertItem ( 19, _T("家用洗衣机水嘴"), 0 ); m_listCtrl.SetItemText ( 19, 1, _T("0.2")); m_listCtrl.SetItemText ( 19, 2, _T("1")); m_listCtrl.SetItemText ( 19, 3, _T("15")); m_listCtrl.SetItemText ( 19, 4, _T("0.05")); } else{ m_listCtrl.InsertColumn ( 0, _T("卫生洁具名称"), LVCFMT_LEFT, 175 ); m_listCtrl.InsertColumn ( 1, _T("排水流量(L/s)"), LVCFMT_LEFT, 90 ); m_listCtrl.InsertColumn ( 2, _T("当量"), LVCFMT_LEFT, 70 ); m_listCtrl.InsertColumn ( 3, _T("排水管管径(mm)"), LVCFMT_LEFT, 100 ); m_listCtrl.InsertItem ( 0, _T("洗涤盆、污水盆"), 0 ); m_listCtrl.SetItemText ( 0, 1, _T("0.33")); m_listCtrl.SetItemText ( 0, 2, _T("1.00")); m_listCtrl.SetItemText ( 0, 3, _T("50")); m_listCtrl.InsertItem ( 1, _T("餐厅、厨房单格洗菜盆"), 0 ); m_listCtrl.SetItemText ( 1, 1, _T("0.67")); m_listCtrl.SetItemText ( 1, 2, _T("2.00")); m_listCtrl.SetItemText ( 1, 3, _T("50")); m_listCtrl.InsertItem ( 2, _T("餐厅、厨房双格洗菜盆"), 0 ); m_listCtrl.SetItemText ( 2, 1, _T("1.00")); m_listCtrl.SetItemText ( 2, 2, _T("3.00")); m_listCtrl.SetItemText ( 2, 3, _T("50")); m_listCtrl.InsertItem ( 3, _T("盥洗槽(每个水嘴)"), 0 ); m_listCtrl.SetItemText ( 3, 1, _T("0.33")); m_listCtrl.SetItemText ( 3, 2, _T("1.00")); m_listCtrl.SetItemText ( 3, 3, _T("50~75")); m_listCtrl.InsertItem ( 4, _T("洗手盆"), 0 ); m_listCtrl.SetItemText ( 4, 1, _T("0.1")); m_listCtrl.SetItemText ( 4, 2, _T("0.3")); m_listCtrl.SetItemText ( 4, 3, _T("32~50")); m_listCtrl.InsertItem ( 5, _T("洗脸盆"), 0 ); m_listCtrl.SetItemText ( 5, 1, _T("0.25")); m_listCtrl.SetItemText ( 5, 2, _T("0.75")); m_listCtrl.SetItemText ( 5, 3, _T("32~50")); m_listCtrl.InsertItem ( 6, _T("浴盆"), 0 ); m_listCtrl.SetItemText ( 6, 1, _T("1.0")); m_listCtrl.SetItemText ( 6, 2, _T("3.00")); m_listCtrl.SetItemText ( 6, 3, _T("50")); m_listCtrl.InsertItem ( 7, _T("淋浴器"), 0 ); m_listCtrl.SetItemText ( 7, 1, _T("0.15")); m_listCtrl.SetItemText ( 7, 2, _T("0.45")); m_listCtrl.SetItemText ( 7, 3, _T("50")); // m_listCtrl.InsertItem ( 8, _T("大便器(水箱)"), 0 ); // cet 2010.6.28 del m_listCtrl.InsertItem ( 8, _T("大便器(冲洗水箱)"), 0 ); // cet 2010.6.28 add m_listCtrl.SetItemText ( 8, 1, _T("1.5")); m_listCtrl.SetItemText ( 8, 2, _T("4.5")); m_listCtrl.SetItemText ( 8, 3, _T("100")); // cet 2010.6.28 del // m_listCtrl.InsertItem ( 9, _T("大便器(冲落式)"), 0 ); // m_listCtrl.SetItemText ( 9, 1, _T("1.5")); // m_listCtrl.SetItemText ( 9, 2, _T("4.5")); // m_listCtrl.SetItemText ( 9, 3, _T("100")); // // m_listCtrl.InsertItem ( 10, _T("大便器(虹吸式)"), 0 ); // m_listCtrl.SetItemText ( 10, 1, _T("2.0")); // m_listCtrl.SetItemText ( 10, 2, _T("6.0")); // m_listCtrl.SetItemText ( 10, 3, _T("100")); m_listCtrl.InsertItem ( 9, _T("大便器(自闭式冲洗阀)"), 0 ); // cet 2010.6.28 del // m_listCtrl.SetItemText ( 11, 1, _T("1.5")); // m_listCtrl.SetItemText ( 11, 2, _T("4.5")); // cet 2010.6.28 add m_listCtrl.SetItemText ( 9, 1, _T("1.2")); m_listCtrl.SetItemText ( 9, 2, _T("3.6")); m_listCtrl.SetItemText ( 9, 3, _T("100")); m_listCtrl.InsertItem ( 10, _T("小便器"), 0 ); m_listCtrl.SetItemText ( 10, 1, _T("0.1")); m_listCtrl.SetItemText ( 10, 2, _T("0.3")); m_listCtrl.SetItemText ( 10, 3, _T("40~50")); m_listCtrl.InsertItem ( 11, _T("医用倒便器"), 0 ); m_listCtrl.SetItemText ( 11, 1, _T("1.5")); m_listCtrl.SetItemText ( 11, 2, _T("4.5")); m_listCtrl.SetItemText ( 11, 3, _T("100")); m_listCtrl.InsertItem ( 12, _T("大便槽(≤4个蹲位)"), 0 ); m_listCtrl.SetItemText ( 12, 1, _T("2.5")); m_listCtrl.SetItemText ( 12, 2, _T("7.5")); m_listCtrl.SetItemText ( 12, 3, _T("100")); m_listCtrl.InsertItem ( 13, _T("大便槽(>4个蹲位)"), 0 ); m_listCtrl.SetItemText ( 13, 1, _T("3.0")); m_listCtrl.SetItemText ( 13, 2, _T("9.0")); m_listCtrl.SetItemText ( 13, 3, _T("150")); m_listCtrl.InsertItem ( 14, _T("小便槽(每米长)"), 0 ); m_listCtrl.SetItemText ( 14, 1, _T("0.17")); m_listCtrl.SetItemText ( 14, 2, _T("0.5")); m_listCtrl.SetItemText ( 14, 3, _T("-")); m_listCtrl.InsertItem ( 15, _T("化验盆(无塞)"), 0 ); m_listCtrl.SetItemText ( 15, 1, _T("0.2")); m_listCtrl.SetItemText ( 15, 2, _T("0.6")); m_listCtrl.SetItemText ( 15, 3, _T("40~50")); m_listCtrl.InsertItem ( 16, _T("净身器"), 0 ); m_listCtrl.SetItemText ( 16, 1, _T("0.1")); m_listCtrl.SetItemText ( 16, 2, _T("0.3")); m_listCtrl.SetItemText ( 16, 3, _T("40~50")); m_listCtrl.InsertItem ( 17, _T("饮水器"), 0 ); m_listCtrl.SetItemText ( 17, 1, _T("0.05")); m_listCtrl.SetItemText ( 17, 2, _T("0.15")); m_listCtrl.SetItemText ( 17, 3, _T("25~50")); m_listCtrl.InsertItem ( 18, _T("家用洗衣机"), 0 ); m_listCtrl.SetItemText ( 18, 1, _T("0.5")); m_listCtrl.SetItemText ( 18, 2, _T("1.5")); m_listCtrl.SetItemText ( 18, 3, _T("50")); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSanitaryDangDlg::OnOK() { UpdateData(TRUE); if(!m_bMultSel){ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition(); int nItem = m_listCtrl.GetNextSelectedItem(pos); if(nItem > -1){ m_csRetName = m_listCtrl.GetItemText(nItem, 0); CString csTmp = m_listCtrl.GetItemText(nItem, 2); int idx = csTmp.Find(_T("~"), 0); if(idx > -1) csTmp = csTmp.Left(idx); m_nRet = _tstof(csTmp); csTmp = m_listCtrl.GetItemText(nItem, 1); m_nRet2 = _tstof(csTmp); } } CDialog::OnOK(); } void CSanitaryDangDlg::OnDblclkListDang(NMHDR* pNMHDR, LRESULT* pResult) { if(m_bMultSel){ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition(); int nItem = m_listCtrl.GetNextSelectedItem(pos); if(nItem > -1){ CString csName = m_listCtrl.GetItemText(nItem, 0); CString csQ = m_listCtrl.GetItemText(nItem, 1); CString csTmp = m_listCtrl.GetItemText(nItem, 2); int idx = csTmp.Find(_T("~"), 0); if(idx > -1) csTmp = csTmp.Left(idx); m_nRet += _tstof(csTmp); m_nAllQ += _tstof(csQ); if(_tstof(csQ) > m_nBigQ) m_nBigQ = _tstof(csQ); m_csNg.Format(_T("%.2f"), m_nRet); UpdateData(FALSE); if(m_lstSel.Index(csName) < 0){ m_listSel.AppendRow(); int nLen = m_lstSel.Length(); m_listSel.GetCell(nLen, 0).SetText(_T("1")); m_listSel.GetCell(nLen, 1).SetText(csName); m_lstSel.Append(tstrnew(csName)); m_listSel.m_vecData.push_back(std::make_pair(_tstof(csTmp), _tstof(csQ))); } else{ for(int i=0;i message == WM_RBUTTONDOWN) { CWnd * pWnd = GetFocus(); long nSel = m_listSel.GetCurRowIndex(); if (pWnd->GetSafeHwnd() == m_listSel.GetSafeHwnd() && nSel >= 0 && m_listSel.IsValidRow(nSel)) { CMenu menu; DWORD dwSelectionMade; VERIFY(menu.LoadMenu(IDR_MENU_SANITARYDANG)); CMenu *pmenuPopup = menu.GetSubMenu(0); ASSERT(pmenuPopup != NULL); dwSelectionMade = pmenuPopup->TrackPopupMenu( (TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_NONOTIFY),pMsg-> pt.x, pMsg-> pt.y, this ); pmenuPopup-> DestroyMenu(); return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } void CSanitaryDangDlg::Delete() { long nSel = m_listSel.GetCurRowIndex(); m_lstSel.Remove(nSel); m_nBigQ = 0; std::vector >::iterator it = m_listSel.m_vecData.begin(); bool bFind = false; for(int i=0; i < m_listSel.GetRowNum();i++) { double dDang = m_listSel.m_vecData[i].first; double dQ = m_listSel.m_vecData[i].second; if (i == nSel && !bFind) { bFind = true; CString csNum = (LPCTSTR)m_listSel.GetCell(i, 0).GetText(); int iNum = _ttoi(csNum); int n = 0 - iNum; m_nRet += (n * dDang); m_nAllQ += (n * dQ); CString sAllQ; sAllQ.Format(_T("%.2f"), m_nAllQ); m_nAllQ = _tstof(sAllQ); m_csNg.Format(_T("%.2f"), m_nRet); it = m_listSel.m_vecData.erase(it); m_listSel.DelRow(nSel); i--; } else if (m_nBigQ < dQ) { m_nBigQ = dQ; } if (it != m_listSel.m_vecData.end()) { it++; } } UpdateData(FALSE); } LRESULT CSanitaryDangDlg::Onadd_event_ok(WPARAM wParam, LPARAM lParam) { if (wParam == -1 && lParam == -1) { Delete(); return 0; } m_nBigQ = 0; for(int i=0; i < m_listSel.GetRowNum();i++) { double dDang = m_listSel.m_vecData[i].first; double dQ = m_listSel.m_vecData[i].second; if (i == wParam) { CString csNum = (LPCTSTR)m_listSel.GetCell(i, 0).GetText(); int iNum = _ttoi(csNum); int n = lParam - iNum; m_nRet += (n * dDang); m_nAllQ += (n * dQ); m_csNg.Format(_T("%.2f"), m_nRet); } if (m_nBigQ < dQ) { m_nBigQ = dQ; } } UpdateData(FALSE); return 0; }