// UnitToolDlg.cpp : implementation file // #include "StdAfx.h" #include "UnitToolDlg.h" //#include "THvacLayerManBar.h" //#include "DbfUtility.h" #include "tgas.h" using namespace TchPrivate; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CUnitToolDlg dialog TUnitLib CUnitToolDlg::g_lib; CUnitToolDlg::CUnitToolDlg(CWnd* pParent /*=NULL*/) : CDialog(CUnitToolDlg::IDD, pParent) { //{{AFX_DATA_INIT(CUnitToolDlg) m_dNewNum = 0.0; //}}AFX_DATA_INIT m_dOldNum = 0.0; // 注:以下数据读取对话框记忆值 m_csParam = _T(""); m_csOldUnit = _T(""); m_csNewUnit = _T(""); } void CUnitToolDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CUnitToolDlg) DDX_Control(pDX, IDC_LIST_CONTENT, m_lstContent); DDX_Control(pDX, IDC_COMBO_ITEM, m_cmbItem); DDX_Text(pDX, IDC_EDIT_NEWNUM, m_dNewNum); DDX_Text(pDX, IDC_EDIT_OLDNUM, m_dOldNum); DDX_Text(pDX, IDC_STATIC_NEWUNIT, m_csNewUnit); DDX_Text(pDX, IDC_STATIC_OLDUNIT, m_csOldUnit); DDX_Text(pDX, IDC_EDIT_PARAM, m_csParam); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CUnitToolDlg, CDialog) //{{AFX_MSG_MAP(CUnitToolDlg) ON_BN_CLICKED(IDC_BUTTON_CAL, OnButtonCal) ON_BN_CLICKED(IDC_BUTTON_OPPOSITECAL, OnButtonOppositecal) ON_CBN_SELCHANGE(IDC_COMBO_ITEM, OnSelchangeComboItem) ON_LBN_SELCHANGE(IDC_LIST_CONTENT, OnSelchangeListContent) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CUnitToolDlg message handlers BOOL CUnitToolDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here GetItem(); // 1、获取换算项目,并初始化下拉列表 int nLen = m_lstItem.Length(); for (int i = 0; i < nLen; i++) { m_cmbItem.AddString(m_lstItem[i]); } m_cmbItem.SetCurSel(0); InitContentLst(); // 2、获取换算内容,并初始化列表 return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } // 从数据库中获取单位换算项目,并初始化下拉列表 BOOL CUnitToolDlg::GetItem() { XString szFile; if (!FindFile(_T("UnitItem.DBF"), szFile)) { AfxMessageBox(_T("对不起,没有找到UnitItem.DBF文件!")); return FALSE; } CodeBase db; XDbfTable *pTable = db.Open(szFile); if (pTable == NULL) { AfxMessageBox(XString(_T("打开%s失败!"), szFile)); return FALSE; } if (pTable->GetFieldContent(_T("Item")) == NULL) { pTable->Close(); AfxMessageBox(XString(_T("打开%s失败!"), szFile)); return FALSE; } for (pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext()) { CString csItem; GET_FIELD(pTable, _T("Item"), csItem); if ((!csItem.IsEmpty()) && (m_lstItem.Index(csItem) < 0)) { m_lstItem.Append(tstrnew(csItem)); } } pTable->Close(); return TRUE; } // 根据单位换算项目,初始化列表 BOOL CUnitToolDlg::InitContentLst() { UpdateData(TRUE); g_lib.ClearAll(); // 首先清空 m_lstContent.ResetContent(); CString csItem; m_cmbItem.GetWindowText(csItem); // 获取当前项目 if (!g_lib.OpenLib(csItem)) // 获取指定项目的换算内容,构造出链表 { return FALSE; } XStringList lstUnit; // 获取所有换算内容列表 g_lib.GetUnitContent(lstUnit); int nLen = lstUnit.Length(); for (int i = 0; i < nLen; i++) { m_lstContent.AddString(lstUnit[i]); } return TRUE; } // 根据选择的换算单位,获取换算系数,并初始化字符串 BOOL CUnitToolDlg::InitParamString() { UpdateData(TRUE); CString csResult; // 所选择的换算单位 int nIndex = m_lstContent.GetCurSel(); if (nIndex < 0) { return FALSE; } m_lstContent.GetText(nIndex, csResult); CString csUnit1, csUnit2; nIndex = csResult.Find(_T("<"), 0); csUnit1 = csResult.Left(nIndex-1); // 原单位 m_csOldUnit = g_lib.GetUnit(csUnit1); // 字符串中显示的内容,去掉括号 nIndex = csResult.Find(_T(">"), 0); csUnit2 = csResult.Mid(nIndex+2, csResult.GetLength()-1); // 新单位 m_csNewUnit = g_lib.GetUnit(csUnit2); g_lib.GetParam(csUnit1, csUnit2, m_csParam, m_csOppositeParam, m_dParam, m_dOppParam); // 获取换算系数 UpdateData(FALSE); return TRUE; } // 获取计算结果 void CUnitToolDlg::CalNewNum() { if (m_dParam < -1.0E-5) // 温度 { int nParam = (int)m_dParam; if (nParam == -1) // 摄氏温标-——>华氏温标 { m_dNewNum = 9.0/5.0*m_dOldNum + 32; } else if (nParam == -2) { m_dNewNum = (m_dOldNum - 32) * 5.0/9.0; } else if (nParam == -3) // 摄氏温标-——>列氏温标 { m_dNewNum = 0.8 * m_dOldNum; } else if (nParam == -4) { m_dNewNum = 1.25 * m_dOldNum; } else if (nParam == -5) // 摄氏温标-——>开氏温标 { m_dNewNum = m_dOldNum + 273; } else if (nParam == -6) { m_dNewNum = m_dOldNum - 273; } else if (nParam == -7) // 华氏温标-——>列氏温标 { m_dNewNum = (m_dOldNum - 32) * 4.0/9.0; } else if (nParam == -8) { m_dNewNum = 9.0/4.0*m_dOldNum + 32; } } else // 其他 { m_dNewNum = m_dOldNum * m_dParam; } CString csTmp; csTmp.Format(_T("%.2f"), m_dNewNum); m_dNewNum = _tstof(csTmp); // 保留两位小数 } void CUnitToolDlg::OnButtonCal() { // TODO: Add your control notification handler code here UpdateData(TRUE); CalNewNum(); // 计算 UpdateData(FALSE); } void CUnitToolDlg::OnButtonOppositecal() { // TODO: Add your control notification handler code here UpdateData(TRUE); Exchange(m_csNewUnit, m_csOldUnit); // 交换 Exchange(m_csParam, m_csOppositeParam); Exchange(m_dParam, m_dOppParam); CalNewNum(); // 计算 UpdateData(FALSE); } void CUnitToolDlg::OnCancel() { // TODO: Add extra cleanup here // 注:对话框记忆功能 CDialog::OnCancel(); } void CUnitToolDlg::OnSelchangeComboItem() { // TODO: Add your control notification handler code here InitContentLst(); m_dOldNum = 0; // 清空 m_csOldUnit = _T(""); m_csParam = _T(""); m_dNewNum = 0; m_csNewUnit = _T(""); UpdateData(FALSE); } void CUnitToolDlg::OnSelchangeListContent() { // TODO: Add your control notification handler code here BOOL bRet = InitParamString(); if (!bRet) { return; } m_dOldNum = 0; // 清空 m_dNewNum = 0; UpdateData(FALSE); } /*----------------------------------------------------------------------------* * 函数名称: ChangeUnitCmd * 功能描述: 单位换算对话框 * 参 数: * 返 回 值: * 历 史: 1. 2008-2-17 sg create * 备 注: -----------------------------------------------------------------------------*/ void ChangeUnitCmd() { CTemporaryResourceOverride vTemp; CUnitToolDlg dlg; dlg.DoModal(); // // CString csTmp; // csTmp.Format(_T("%s"), _T("全国民用建筑工程设计技术措施-暖通空调·动力\\表2.1.4-2 温差修正系数a")); // RefBookTool(csTmp); }