// MostuseHeatWaterCalcDlg.cpp : implementation file // #include "stdafx.h" #include "MostuseHeatWaterCalcDlg.h" #include #include "TWordFormulasTemplet.h" #include "TwtDef.h" #include "TelDef.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif void MostUseHeatWaterCalc() { CTemporaryResourceOverride vTemp; CMostuseHeatWaterCalcDlg dlg; dlg.DoModal(); } CMostuseHeatWaterGird::CMostuseHeatWaterGird() { m_pLstUnit = NULL; } CMostuseHeatWaterGird::~CMostuseHeatWaterGird() { } bool CMostuseHeatWaterGird::OnModified(WDGridCell&cell,CString &text) { long nCol = GetCurRowIndex(); if (m_nType == 0) // 全日供应 { if (cell.GetCol().GetIndex() == 3) { int nNum = _ttoi(text); if (nCol != -1 && nCol < m_pLstUnit->Length()) { (*m_pLstUnit)[nCol]->m_iNum = nNum; } } } else // 定时供应 { if (cell.GetCol().GetIndex() == 3) { int nNum = _ttoi(text); if (nCol != -1 && nCol < m_pLstUnit->Length()) { (*m_pLstUnit)[nCol]->m_iNum = nNum; } } else if (cell.GetCol().GetIndex() == 4) { double dVal = _tstof(text); if (nCol != -1 && nCol < m_pLstUnit->Length()) { (*m_pLstUnit)[nCol]->m_nFactor = dVal; } } } return true; } ///////////////////////////////////////////////////////////////////////////// // CMostuseHeatWaterCalcDlg dialog CMostuseHeatWaterCalcDlg::CMostuseHeatWaterCalcDlg(CWnd* pParent /*=NULL*/) : CDialog(CMostuseHeatWaterCalcDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMostuseHeatWaterCalcDlg) m_nHeatT = 60; m_nColdT = 10; m_csRet = _T(""); m_iType = 0; m_csRetW = _T(""); //}}AFX_DATA_INIT } void CMostuseHeatWaterCalcDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMostuseHeatWaterCalcDlg) DDX_Control(pDX, IDC_LIST_ALL, m_listCtrl); DDX_Text(pDX, IDC_EDIT_HEAT, m_nHeatT); DDX_Text(pDX, IDC_EDIT_COLD, m_nColdT); DDX_Text(pDX, IDC_EDIT_RESULT, m_csRet); DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iType); DDX_Text(pDX, IDC_EDIT_RESULTW, m_csRetW); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMostuseHeatWaterCalcDlg, CDialog) //{{AFX_MSG_MAP(CMostuseHeatWaterCalcDlg) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) // ON_MESSAGE(WM_LISTEDIT_INPUTOK, OnEditInputOk) // cet 2010.7.7 del 更换控件 ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel) ON_BN_CLICKED(IDC_RADIO_TYPE1, OnRadioType1) ON_BN_CLICKED(IDC_RADIO_TYPE2, OnRadioType2) ON_BN_CLICKED(IDC_BUTTON_HELP, OnButtonHelp) ON_BN_CLICKED(IDC_BUTTON_WORD, OnButtonWord) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMostuseHeatWaterCalcDlg message handlers BOOL CMostuseHeatWaterCalcDlg::OnInitDialog() { CDialog::OnInitDialog(); // cet 2010.7.7 del 更改控件 // m_listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // m_listCtrl.SetItemControl(EDITBOX, 3); // // if(m_iType == 1){ // m_listCtrl.SetItemControl(EDITBOX, 4); // cet 2010.7.2 add // m_listCtrl.InsertColumn ( 0, _T("用水部位名称"), LVCFMT_LEFT, 200 ); // m_listCtrl.InsertColumn ( 1, _T("小时水量(L)"), LVCFMT_LEFT, 80 ); // m_listCtrl.InsertColumn ( 2, _T("水温(℃)"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 3, _T("数量"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 4, _T("同时百分数"), LVCFMT_LEFT, 75 ); // } // else{ // m_listCtrl.InsertColumn ( 0, _T("建筑物名称"), LVCFMT_LEFT, 200 ); // m_listCtrl.InsertColumn ( 1, _T("最高日用水定额(L)"), LVCFMT_LEFT, 120 ); // m_listCtrl.InsertColumn ( 2, _T("使用时间"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 3, _T("数量"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 4, _T("单位"), LVCFMT_LEFT, 80 ); // } // // m_listCtrl.MapControlsForSubItems(); // cet 2010.7.7 add CRect rect; m_listCtrl.GetWindowRect(&rect); ScreenToClient(&rect); m_listCtrl.Clear(); m_listCtrl.Create(this, IDC_LIST_ALL); m_listCtrl.SetNoDefaultMenu(); m_listCtrl.SetNoAppendButton(); long nWidth = rect.Width() / 7; COLORREF color = RGB(255,0,0); if (m_iType == 1) { m_listCtrl.AppendCol(_T("用水部位名称"), 3 * nWidth); m_listCtrl.AppendCol(_T("小时水量(L)"), nWidth ); m_listCtrl.AppendCol(_T("水温(℃)"), nWidth); m_listCtrl.AppendCol(_T("数量"), nWidth); m_listCtrl.AppendCol(_T("同时百分数"), nWidth); m_listCtrl.GetCol(0).SetReadOnly(); m_listCtrl.GetCol(1).SetReadOnly(); m_listCtrl.GetCol(2).SetReadOnly(); m_listCtrl.GetCol(3).SetTextColor(color); m_listCtrl.GetCol(4).SetTextColor(color); } else { m_listCtrl.AppendCol(_T("建筑物名称"), 3 * nWidth); m_listCtrl.AppendCol(_T("最高日用水定额(L)"), nWidth ); m_listCtrl.AppendCol(_T("使用时间"), nWidth); m_listCtrl.AppendCol(_T("数量"), nWidth); m_listCtrl.AppendCol(_T("单位"), nWidth); m_listCtrl.GetCol(0).SetReadOnly(); m_listCtrl.GetCol(1).SetReadOnly(); m_listCtrl.GetCol(2).SetReadOnly(); m_listCtrl.GetCol(4).SetReadOnly(); m_listCtrl.GetCol(3).SetTextColor(color); } m_listCtrl.GetCol(0).SetCenterAlign(); m_listCtrl.GetCol(1).SetCenterAlign(); m_listCtrl.GetCol(2).SetCenterAlign(); m_listCtrl.GetCol(3).SetCenterAlign(); m_listCtrl.GetCol(4).SetCenterAlign(); m_listCtrl.FitLastCol(); m_listCtrl.SetLst(&m_lstUnit); m_listCtrl.SetType(m_iType); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CMostuseHeatWaterCalcDlg::ResetList() { UpdateData(); // m_listCtrl.DeleteAllItems(); // cet 2010.7.7 del m_listCtrl.Clear(); // cet 2010.7.7 add int len = m_lstUnit.Length(); if(len <=0) return; double nCalc(0); for(int i=0;im_nFactor); csTime.Format(_T("%.1f"), pData->m_nTime); csStdUse.Format(_T("%.2f"), pData->m_nStdUse); csNum.Format(_T("%d"), pData->m_iNum); // cet 2010.7.7 del 更换控件 // m_listCtrl.InsertItem ( i, pData->m_csName, 0 ); // m_listCtrl.SetItemText ( i, 1, csStdUse); // m_listCtrl.SetItemText ( i, 2, csTime); // m_listCtrl.SetItemText ( i, 3, csNum); // if(m_iType == 0) // m_listCtrl.SetItemText ( i, 4, pData->m_csUnit); // else // m_listCtrl.SetItemText ( i, 4, csFactor); // cet 2010.7.7 add m_listCtrl.AppendRow(); m_listCtrl.GetCell(i, 0).SetText(pData->m_csName); m_listCtrl.GetCell(i, 1).SetText(csStdUse); m_listCtrl.GetCell(i, 2).SetText(csTime); m_listCtrl.GetCell(i, 3).SetText(csNum); if (m_iType == 0) { m_listCtrl.GetCell(i, 4).SetText(pData->m_csUnit); } else { m_listCtrl.GetCell(i, 4).SetText(csFactor); } if(m_iType == 1) // nCalc = nCalc + pData->m_nStdUse*(pData->m_nTime - m_nColdT)*0.9832 * pData->m_iNum*pData->m_nFactor*4187/3600; // cet 2010.7.2 del nCalc = nCalc + pData->m_nStdUse*(pData->m_nTime - m_nColdT)*0.9832 * pData->m_iNum*pData->m_nFactor*4.187; else{ double k(1); // cet 2010.7.1 del // if(pData->m_csName.Find(_T("住宅")) > -1 || pData->m_csName.Find(_T("别墅")) > -1){ // if(pData->m_iNum <= 100) // k = 5.12; // else if(pData->m_iNum <= 150) // k = 4.49; // else if(pData->m_iNum <= 200) // k = 4.13; // else if(pData->m_iNum <= 250) // k = 3.88; // else if(pData->m_iNum <= 300) // k = 3.7; // else if(pData->m_iNum <= 500) // k = 3.28; // else if(pData->m_iNum <= 1000) // k = 2.86; // else if(pData->m_iNum <= 3000) // k = 2.48; // else if(pData->m_iNum > 3000) // k = 2.34; // } // else if(pData->m_csName.Find(_T("宾馆客房:旅客")) > -1 // || pData->m_csName.Find(_T("养老院")) > -1 // || pData->m_csName.Find(_T("幼儿园、托儿所:有住宿")) > -1 // || pData->m_csName.Find(_T("集体宿舍")) > -1 ){ // if(pData->m_iNum <= 150) // k = 6.84; // else if(pData->m_iNum <= 300) // k = 5.61; // else if(pData->m_iNum <= 450) // k = 4.97; // else if(pData->m_iNum <= 600) // k = 4.58; // else if(pData->m_iNum <= 900) // k = 4.19; // else if(pData->m_iNum > 900) // k = 3.9; // } // else if(pData->m_csName.Find(_T("医院")) > -1 && pData->m_csUnit.Find(_T("床位")) > -1){ // if(pData->m_iNum <= 50) // k = 4.55; // else if(pData->m_iNum <= 75) // k = 3.78; // else if(pData->m_iNum <= 100) // k = 3.54; // else if(pData->m_iNum <= 200) // k = 2.93; // else if(pData->m_iNum <= 300) // k = 2.6; // else if(pData->m_iNum <= 500) // k = 2.23; // else if(pData->m_iNum > 500) // k = 1.95; // } // else if(pData->m_csName.Find(_T("办公楼")) > -1) // k = 1.3; // // nCalc = nCalc + k*pData->m_nStdUse*pData->m_iNum*4187*(60 - m_nColdT)*0.9832 /86400; // cet 2010.7.1 int nNum = pData->m_iNum; if (pData->m_csName.Find(_T("住宅")) > -1) { if (nNum <= 100) { k = 4.8; } else if (nNum >= 6000) { k = 2.75; } else { k = ((6000 - nNum) * 4.8 + (nNum - 100) * 2.75)/(6000 - 100); } } else if (pData->m_csName.Find(_T("别墅")) > -1) { if (nNum <= 100) { k = 4.21; } else if (nNum >= 6000) { k = 2.47; } else { k = ((6000 - nNum) * 4.21 + (nNum - 100) * 2.47)/(6000 - 100); } } else if (pData->m_csName.Find(_T("酒店式公寓")) > -1) { if (nNum <= 150) { k = 4; } else if (nNum >= 1200) { k = 2.58; } else { k = ((1200 - nNum) * 4 + (nNum - 150) * 2.58)/(1200 - 150); } } else if (pData->m_csName.Find(_T("宿舍(Ⅰ类、Ⅱ类)")) > -1) { if (nNum <= 150) { k = 4.8; } else if (nNum >= 1200) { k = 3.2; } else { k = ((1200 - nNum) * 4.8 + (nNum - 150) * 3.2)/(1200 - 150); } } else if (pData->m_csName.Find(_T("招待所、培训中心、普通旅馆")) > -1) { if (nNum <= 150) { k = 3.84; } else if (nNum >= 1200) { k = 3; } else { k = ((1200 - nNum) * 3.84 + (nNum - 150) * 3)/(1200 - 150); } } else if (pData->m_csName.Find(_T("宾馆客房:旅客")) > -1) { if (nNum <= 150) { k = 3.33; } else if (nNum >= 1200) { k = 2.6; } else { k = ((1200 - nNum) * 3.33 + (nNum - 150) * 2.6)/(1200 - 150); } } else if (pData->m_csName.Find(_T("医院")) > -1 && pData->m_csName.Find(_T("医院住院部:门诊部、诊疗所")) == -1) { if (nNum <= 50) { k = 3.63; } else if (nNum >= 1000) { k = 2.56; } else { k = ((1000 - nNum) * 3.63 + (nNum - 50) * 2.56)/(1000 - 50); } } else if (pData->m_csName.Find(_T("医院住院部:门诊部、诊疗所")) > -1) { k = 1.2; } else if (pData->m_csName.Find(_T("幼儿园、托儿所:有住宿")) > -1 ) { if (nNum <= 50) { k = 4.8; } else if (nNum >= 1000) { k = 3.2; } else { k = ((1000 - nNum) * 4.8 + (nNum - 50) * 3.2)/(1000 - 50); } } else if (pData->m_csName.Find(_T("养老院")) > -1 ) { if (nNum <= 50) { k = 3.2; } else if (nNum >= 1000) { k = 2.74; } else { k = ((1000 - nNum) * 3.2 + (nNum - 50) * 2.74)/(1000 - 50); } } else if (pData->m_csName.Find(_T("公共浴室")) > -1 || pData->m_csName.Find(_T("理发室、美容院")) > -1) { k = 1.5; } else if (pData->m_csName.Find(_T("洗衣房")) > -1 || pData->m_csName.Find(_T("餐饮厅")) > -1 || pData->m_csName.Find(_T("办公楼")) > -1 || pData->m_csName.Find(_T("健身中心")) > -1 || pData->m_csName.Find(_T("会议厅")) > -1) { k = 1.2; } else if (pData->m_csName.Find(_T("体育场:运动员淋浴")) > -1) { k = 2.0; } nCalc = nCalc + k * pData->m_iNum * pData->m_nStdUse * 4.187 * (60 - m_nColdT) * 0.9832 / pData->m_nTime; } } m_csRetW.Format(_T("%.2f"), nCalc); // nCalc = nCalc / (1.163*(m_nHeatT - m_nColdT)*0.9832)/1000; // cet 2010.7.2 del nCalc = nCalc / ((m_nHeatT - m_nColdT) * 4.187 * 0.9832); // cet 2010.7.2 add m_csRet.Format(_T("%.2f"), nCalc); UpdateData(FALSE); } void CMostuseHeatWaterCalcDlg::OnButtonAdd() { CTemporaryResourceOverride vTemp; CSelUseUnitDlg dlg; if(m_iType == 0) dlg.m_iMode = 2; else dlg.m_iMode = 1; if(dlg.DoModal() != IDOK) return; double nFactor(1); if(m_iType == 1 && (dlg.m_csName.Find(_T("住宅")) > -1 || dlg.m_csName.Find(_T("医院")) > -1) && (dlg.m_csName.Find(_T("浴盆")) > -1 || dlg.m_csName.Find(_T("淋浴器")) > -1)) nFactor = 0.85; int jjj = dlg.m_iNum; SUseUnitData *pData = new SUseUnitData(dlg.m_csName, dlg.m_csUnit, dlg.m_iNum, dlg.m_nStdUse, nFactor, dlg.m_dTime); m_lstUnit.Append(pData); ResetList(); } void CMostuseHeatWaterCalcDlg::OnButtonDel() { // cet 2010.7.7 del 更改控件 // POSITION pos = m_listCtrl.GetFirstSelectedItemPosition(); // if(!pos) // return; // int nItem = m_listCtrl.GetNextSelectedItem(pos); // cet 2010.7.7 add int nItem = m_listCtrl.GetCurRowIndex(); if (nItem == -1) { return; } if(nItem > (m_lstUnit.Length() - 1)) return; m_lstUnit.Remove(nItem); ResetList(); } void CMostuseHeatWaterCalcDlg::OnOK() { ResetList(); } // cet 2010 7.7 del 更换控件 // LRESULT CMostuseHeatWaterCalcDlg::OnEditInputOk(WPARAM wParam, LPARAM lParam) // { // // DWORD dwAllTk = wParam; // TCHAR szAlltk[256]; // _tcscpy(szAlltk, (const TCHAR*)dwAllTk); // // cet 2010.7.2 del // // if(_tcsicmp(szAlltk, _T("0")) == 0) // // return TRUE; // // int nItem = m_listCtrl.m_iCurSelctedItemIndex; // // if(nItem < 0 || m_lstUnit.Length()==0 || nItem >= m_lstUnit.Length()) // // return TRUE; // // m_lstUnit[nItem]->m_iNum = _ttoi(szAlltk); // // // cet 2010.7.2 add // int nItem = m_listCtrl.m_iCurSelctedItemIndex; // if(nItem < 0 || m_lstUnit.Length()==0 || // nItem >= m_lstUnit.Length()) // { // return TRUE; // } // // int nCol = m_listCtrl.m_iSubItem; // if (nCol == 3) // 数量 // { // m_lstUnit[nItem]->m_iNum = _ttoi(szAlltk); // } // else if (nCol == 4 && m_iType == 1) // 同时百分数 // { // m_lstUnit[nItem]->m_nFactor = _tstof(szAlltk); // } // // ResetList(); // return TRUE; // } void CMostuseHeatWaterCalcDlg::OnRadioType1() { int old = m_iType; UpdateData(TRUE); if(old == m_iType) return; // cet 2010.7.7 del 更换控件 // int nColumnCount = m_listCtrl.GetHeaderCtrl()->GetItemCount(); // for (int i=0;i < nColumnCount;i++) // { // m_listCtrl.DeleteColumn(0); // } // m_listCtrl.InsertColumn ( 0, _T("建筑物名称"), LVCFMT_LEFT, 150 ); // m_listCtrl.InsertColumn ( 1, _T("最高日用水定额(L)"), LVCFMT_LEFT, 120 ); // m_listCtrl.InsertColumn ( 2, _T("使用时间"), LVCFMT_LEFT, 75 ); // m_listCtrl.InsertColumn ( 3, _T("数量"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 4, _T("单位"), LVCFMT_LEFT, 80 ); // m_lstUnit.Reset(); // m_listCtrl.DeleteAllItems(); // cet 2010.7.7 add CRect rect; m_listCtrl.GetWindowRect(&rect); ScreenToClient(&rect); m_listCtrl.Clear(); long nNum = m_listCtrl.GetColNum(); for (int i = nNum - 1; i > -1; i--) { m_listCtrl.DelCol(i); } long nWidth = rect.Width() / 7; m_listCtrl.AppendCol(_T("建筑物名称"), 3 * nWidth); m_listCtrl.AppendCol(_T("最高日用水定额(L)"), nWidth ); m_listCtrl.AppendCol(_T("使用时间"), nWidth); m_listCtrl.AppendCol(_T("数量"), nWidth); m_listCtrl.AppendCol(_T("单位"), nWidth); m_listCtrl.GetCol(0).SetReadOnly(); m_listCtrl.GetCol(1).SetReadOnly(); m_listCtrl.GetCol(2).SetReadOnly(); m_listCtrl.GetCol(3).SetReadOnly(false); COLORREF color = RGB(255,0,0); m_listCtrl.GetCol(3).SetTextColor(color); m_listCtrl.GetCol(4).SetReadOnly(); m_listCtrl.GetCol(0).SetCenterAlign(); m_listCtrl.GetCol(1).SetCenterAlign(); m_listCtrl.GetCol(2).SetCenterAlign(); m_listCtrl.GetCol(3).SetCenterAlign(); m_listCtrl.GetCol(4).SetCenterAlign(); m_listCtrl.FitLastCol(); m_listCtrl.SetType(m_iType); m_lstUnit.Reset(); } void CMostuseHeatWaterCalcDlg::OnRadioType2() { int old = m_iType; UpdateData(TRUE); if(old == m_iType) return; // cet 2010.7.7 del 更换控件 // int nColumnCount = m_listCtrl.GetHeaderCtrl()->GetItemCount(); // for (int i=0;i < nColumnCount;i++) // { // m_listCtrl.DeleteColumn(0); // } // m_listCtrl.SetItemControl(EDITBOX, 4); // cet 2010.7.2 add // m_listCtrl.InsertColumn ( 0, _T("用水部位名称"), LVCFMT_LEFT, 150 ); // m_listCtrl.InsertColumn ( 1, _T("小时水量(L)"), LVCFMT_LEFT, 80 ); // m_listCtrl.InsertColumn ( 2, _T("水温(℃)"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 3, _T("数量"), LVCFMT_LEFT, 60 ); // m_listCtrl.InsertColumn ( 4, _T("同时百分数"), LVCFMT_LEFT, 75 ); // m_lstUnit.Reset(); // m_listCtrl.DeleteAllItems(); // cet 2010.7.7 add CRect rect; m_listCtrl.GetWindowRect(&rect); ScreenToClient(&rect); m_listCtrl.Clear(); long nNum = m_listCtrl.GetColNum(); for (int i = nNum - 1; i > -1; i--) { m_listCtrl.DelCol(i); } long nWidth = rect.Width() / 7; m_listCtrl.AppendCol(_T("用水部位名称"), 3 * nWidth); m_listCtrl.AppendCol(_T("小时水量(L)"), nWidth ); m_listCtrl.AppendCol(_T("水温(℃)"), nWidth); m_listCtrl.AppendCol(_T("数量"), nWidth); m_listCtrl.AppendCol(_T("同时百分数"), nWidth); m_listCtrl.GetCol(0).SetReadOnly(); m_listCtrl.GetCol(1).SetReadOnly(); m_listCtrl.GetCol(2).SetReadOnly(); m_listCtrl.GetCol(3).SetReadOnly(false); m_listCtrl.GetCol(4).SetReadOnly(false); COLORREF color = RGB(255,0,0); m_listCtrl.GetCol(3).SetTextColor(color); m_listCtrl.GetCol(4).SetTextColor(color); m_listCtrl.GetCol(0).SetCenterAlign(); m_listCtrl.GetCol(1).SetCenterAlign(); m_listCtrl.GetCol(2).SetCenterAlign(); m_listCtrl.GetCol(3).SetCenterAlign(); m_listCtrl.GetCol(4).SetCenterAlign(); m_listCtrl.FitLastCol(); m_listCtrl.SetType(m_iType); m_lstUnit.Reset(); } void CMostuseHeatWaterCalcDlg::OnButtonHelp() { CString csPrompt; csPrompt = _T("冷水计算温度,应以当地最冷月平均水温资料确定。\n\n"); csPrompt = csPrompt + _T("1:黑龙江、吉林、内蒙古的全部,辽宁的大部分,\n河北、山西、陕西偏北部分,宁夏偏东部分\n"); csPrompt = csPrompt + _T("地面水温度: 4℃ 地下水温度 6~10℃\n\n"); csPrompt = csPrompt + _T("2:北京、天津、山东全部,河北、山西、陕西大部分,\n河北北部,甘肃、宁夏、辽宁的南部,青海偏东和江苏偏北的一小部分\n"); csPrompt = csPrompt + _T("地面水温度: 4℃ 地下水温度 10~15℃\n\n"); csPrompt = csPrompt + _T("3:上海、浙江全部,江西、安徽、江苏的大部分,\n福建北部,湖南、湖北东部,河南南部\n"); csPrompt = csPrompt + _T("地面水温度: 5℃ 地下水温度 15~20℃\n\n"); csPrompt = csPrompt + _T("4:广东、台湾全部,广西大部分,福建、云南的南部\n"); csPrompt = csPrompt + _T("地面水温度: 10~15℃ 地下水温度 20℃\n\n"); csPrompt = csPrompt + _T("5:重庆、贵州全部,四川、云南的大部分,湖南、湖北的西部,\n陕西和甘肃秦岭以南地区,广西偏北的一小部分\n"); csPrompt = csPrompt + _T("地面水温度: 7℃ 地下水温度 15~20℃\n"); MessageBox(csPrompt); } void CMostuseHeatWaterCalcDlg::OnButtonWord() { UpdateData(); int len = m_lstUnit.Length(); if(len <=0) return; //初始化 COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR), vtTrue((short)TRUE), vtFalse((short)FALSE); _Application wordApplication; Documents wordDocuments; _Document activeDocument; Paragraphs wordParagraphs; Selection wordSelection; if (!wordApplication.CreateDispatch(_T("Word.Application"))) { AfxMessageBox(_T("不能执行Microsoft Word 8.0!")); return; } // cet 2010.7.2 add 打开公式模板 TWordFormulasTemplet wdFormula; CString sPathName = g_csSysPath; sPathName += _T("formula.doc"); if (!wdFormula.OpenWordFormulasTempletFile(sPathName)) { return; } wordApplication.SetVisible(TRUE); wordDocuments = wordApplication.GetDocuments(); activeDocument = wordDocuments.Add(vtOptional,vtOptional); //写一行字 wordSelection = wordApplication.GetSelection(); wordParagraphs = wordSelection.GetParagraphs(); wordParagraphs.SetAlignment(1); // 0: 居左 1:居中 2:居右 wordSelection.TypeText(_T("热水小时用水量计算书\n")); wordParagraphs.SetAlignment(0); // 0: 居左 1:居中 2:居右 // wordSelection.TypeText(_T("按照建筑给水排水设计规范 (GB 50015-2003)进行计算\n")); // cet 2010.7.2 del // cet 2010.7.2 add _Font font; font = wordSelection.GetFont(); wordSelection.TypeText(_T("按照建筑给水排水设计规范 (GB 50015-2003)(2009年版)\n")); if(m_iType == 0){ // cet 2010.7.2 del // wordSelection.TypeText(_T("Qh = Kh*m*Qr*C*(Tr-Tl)*ρ/86400\n")); // wordSelection.TypeText(_T("式中: \n")); // wordSelection.TypeText(_T("Qh -- 设计小时耗热量(W) \n")); // wordSelection.TypeText(_T("m -- 用水计算单位数(人数或床位数)\n")); // wordSelection.TypeText(_T("Qr -- 热水用水定额(L/人·d)\n")); // wordSelection.TypeText(_T("C -- 水的比热 4187(J/Kg·℃\n")); // wordSelection.TypeText(_T("Tr -- 热水温度,Tr = 60℃\n")); // wordSelection.TypeText((const TCHAR*)XString(_T("Tl -- 冷水温度,Tl = %.0f℃\n"), m_nColdT)); // wordSelection.TypeText(_T("ρ -- 热水密度(kg/L) ρ=0.9832 \n")); // wordSelection.TypeText(_T("Kh -- 小时变化系数\n\n")); // cet 2010.7.2 add wordSelection.TypeText(_T(" ")); wdFormula.InsertFormula(7, wordSelection); wordSelection.TypeText(_T("\n式中: ")); wordSelection.TypeText(_T("Q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("h")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计小时耗热量(KJ/h);\n")); wordSelection.TypeText(_T(" m -- 用水计算单位数(人数或床位数);\n")); wordSelection.TypeText(_T(" q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 热水用水定额(L/人·d或L/床·d);\n")); wordSelection.TypeText(_T(" C -- 水的比热 ,C=4.187(KJ/kg·℃);\n")); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 热水温度,")); wordSelection.TypeText(_T("t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T("=60℃\n")); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 冷水温度,")); wordSelection.TypeText(_T("t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); CString strText; strText.Format(_T("=%.3f"), m_nColdT); strText.TrimRight(_T("0")); strText.TrimRight(_T(".")); strText += _T("℃;\n"); wordSelection.TypeText(strText); wordSelection.TypeText(_T(" ρ")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 热水密度(kg/L),")); wordSelection.TypeText(_T("ρ")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T("=0.9832; \n")); wordSelection.TypeText(_T(" T -- 每日使用时间(h);\n")); wordSelection.TypeText(_T(" K")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("h")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 小时变化系数;\n\n")); } else{ // cet 2010.7.2 del // wordSelection.TypeText(_T("Qh = ∑(q*(Tr-Tl)*ρ*N*b*C/3600)\n")); // wordSelection.TypeText(_T("式中: \n")); // wordSelection.TypeText(_T("Qh -- 设计小时耗热量(W) \n")); // wordSelection.TypeText(_T("q -- 卫生器具热水的小时用水定额(L/h)\n")); // wordSelection.TypeText(_T("N -- 同类型卫生器具数\n")); // wordSelection.TypeText(_T("C -- 水的比热 4187(J/Kg·℃\n")); // wordSelection.TypeText(_T("Tr -- 热水温度 ℃\n")); // wordSelection.TypeText((const TCHAR*)XString(_T("Tl -- 冷水温度,Tl = %.0f℃\n"), m_nColdT)); // wordSelection.TypeText(_T("ρ -- 热水密度(kg/L) ρ=0.9832 \n")); // wordSelection.TypeText(_T("b -- 卫生器具的同时使用百分数:住宅、旅馆、医院、疗养院病房,卫生间浴盆或淋浴器可按70%~100%计,其它器具不计,但定时连续供水时间应不小于2h\n\n")); // cet 2010.7.2 add wordSelection.TypeText(_T(" ")); wdFormula.InsertFormula(8,wordSelection); wordSelection.TypeText(_T("\n式中: ")); wordSelection.TypeText(_T("Q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("h")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计小时耗热量(KJ/h);\n")); wordSelection.TypeText(_T(" q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("h")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 卫生器具热水的小时用水定额(L/h)\n")); wordSelection.TypeText(_T(" C -- 水的比热 4.187(KJ/kg·℃);\n")); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 热水温度 ℃;\n")); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 冷水温度,")); wordSelection.TypeText(_T("t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); CString strTemp; strTemp.Format(_T("=%.3f"), m_nColdT); strTemp.TrimRight(_T("0")); strTemp.TrimRight(_T(".")); strTemp += _T("℃;\n"); wordSelection.TypeText(strTemp); wordSelection.TypeText(_T(" ρ")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 热水密度(kg/L); \n")); wordSelection.TypeText(_T(" n")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("0")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 同类型卫生器具数;\n")); wordSelection.TypeText(_T(" b -- 卫生器具的同时使用百分数;\n\n")); } // cet 2010.7.2 del // wordSelection.TypeText(_T("Qrh = Qh / (1.163*(Tr-Tl)*ρ)\n")); // wordSelection.TypeText(_T("式中: \n")); // wordSelection.TypeText(_T("Qrh -- 设计小时热水量(L/h) \n")); // wordSelection.TypeText(_T("Qh -- 设计小时耗热量(W) \n")); // wordSelection.TypeText((const TCHAR*)XString(_T("Tr -- 设计热水温度,Tl = %.0f℃\n"), m_nHeatT)); // wordSelection.TypeText((const TCHAR*)XString(_T("Tl -- 设计冷水温度,Tl = %.0f℃\n"), m_nColdT)); // wordSelection.TypeText(_T("ρ -- 热水密度(kg/L) ρ=0.9832 \n\n")); // cet 2010.7.2 add wordSelection.TypeText(_T(" ")); wdFormula.InsertFormula(9,wordSelection); wordSelection.TypeText(_T("\n式中: ")); wordSelection.TypeText(_T("q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("rh")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计小时热水量(L/h);\n")); wordSelection.TypeText(_T(" Q")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("h")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计小时耗热量(KJ/h);\n")); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计热水温度,")); wordSelection.TypeText(_T("t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("l")); font.SetSubscript(0); CString strTemp; strTemp.Format(_T("=%.3f"), m_nHeatT); strTemp.TrimRight(_T("0")); strTemp.TrimRight(_T(".")); strTemp += _T("℃;\n"); wordSelection.TypeText(strTemp); wordSelection.TypeText(_T(" t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); wordSelection.TypeText(_T(" -- 设计冷水温度,")); wordSelection.TypeText(_T("t")); font.SetSubscript(2); //处理下标 wordSelection.TypeText(_T("r")); font.SetSubscript(0); strTemp.Format(_T("=%.3f"), m_nColdT); strTemp.TrimRight(_T("0")); strTemp.TrimRight(_T(".")); strTemp += _T("℃;\n\n"); wordSelection.TypeText(strTemp); double nMostByDate(0), nMostByHour(0), nAverage(0); CString csMostByDate, csMostByHour, csAverage, csPercent; wordSelection.TypeText(_T("各用水部位统计结果如下\n")); //画表格 int rows(len+1), columns(3); Selection wSelection = wordApplication.GetSelection(); Range oRange = wSelection.GetRange(); Tables oTables = activeDocument.GetTables(); _Table oTable = oTables.Add(oRange, rows, columns); // cet 2010.3.25 add Borders oBorders = oTable.GetBorders(); oBorders.SetInsideLineStyle(1); // 设置表格线型 oBorders.SetOutsideLineStyle(1); Columns oColumns; Column oColumn; oColumns = oTable.GetColumns(); oColumn = oColumns.Item(1); oColumn.SetWidth(190, 0); // 0 = wdAdjustNone oColumn = oColumns.Item(2); oColumn.SetWidth(85, 0); oColumn = oColumns.Item(3); oColumn.SetWidth(85, 0); Cell oCell; oCell = oTable.Cell(1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(_T("用水部位")); oCell = oTable.Cell(1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(_T("用水标准")); oCell = oTable.Cell(1, 3); oRange = oCell.GetRange(); oRange.InsertAfter(_T("数量")); for(int i=1;im_nStdUse); csNum.Format(_T("%d"), pData->m_iNum); oCell = oTable.Cell(i+1, 1); oRange = oCell.GetRange(); oRange.InsertAfter(pData->m_csName); oCell = oTable.Cell(i+1, 2); oRange = oCell.GetRange(); oRange.InsertAfter(csStdUse); oCell = oTable.Cell(i+1, 3); oRange = oCell.GetRange(); oRange.InsertAfter(csNum); } COleVariant vtOptional2((long)DISP_E_PARAMNOTFOUND,VT_ERROR); wordSelection = wordApplication.GetSelection(); wordSelection.GoTo(COleVariant((short)3), // 3 = wdGoToLine COleVariant((short)-1),vtOptional2,vtOptional2); // -1 = wdGoToLast wSelection = wordApplication.GetSelection(); wSelection.TypeParagraph(); wordSelection.TypeText(_T("总计如下\n")); // cet 2010.7.2 del // csPercent.Format(_T("小时用水量:%s (m3/h)\n"), m_csRet); // wordSelection.TypeText(csPercent); // // csPercent.Format(_T("设计小时耗热量:%s (w)\n"), m_csRetW); // wordSelection.TypeText(csPercent); // cet 2010.7.2 add csPercent.Format(_T("设计小时热水量:%s (L/h)\n"), m_csRet); wordSelection.TypeText(csPercent); csPercent.Format(_T("设计小时耗热量:%s (KJ/h)\n"), m_csRetW); wordSelection.TypeText(csPercent); wdFormula.CloseFile(); }