292 lines
6.5 KiB
C++
292 lines
6.5 KiB
C++
// 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);
|
||
|
|
}
|