Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtCalc/MostuseHeatWaterCalcDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

1002 lines
33 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// MostuseHeatWaterCalcDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MostuseHeatWaterCalcDlg.h"
#include <MSWORD8.h>
#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;i<len;i++){
SUseUnitData *pData = m_lstUnit[i];
CString csFactor, csTime, csStdUse, csNum;
csFactor.Format(_T("%.2f"), pData->m_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;i<len+1;i++){
SUseUnitData *pData = m_lstUnit[i-1];
CString csStdUse, csNum;
csStdUse.Format(_T("%.2f"), pData->m_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();
}