// DecompressBoardCalcDlg.cpp : implementation file // #include "stdafx.h" #include "DecompressBoardCalcDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDecompressBoardCalcDlg dialog void DecompressBoardCalc() { CTemporaryResourceOverride vTemp; CDecompressBoardCalcDlg dlg; dlg.DoModal(); } CDecompressBoardCalcDlg::CDecompressBoardCalcDlg(CWnd* pParent /*=NULL*/) : CDialog(CDecompressBoardCalcDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDecompressBoardCalcDlg) m_bChange = FALSE; m_csD1 = _T("150"); m_csD2 = _T("150"); m_csDn = _T(""); m_csPress = _T("10"); m_nQ = 25; m_iUnit = 0; m_iWant = 0; //}}AFX_DATA_INIT } void CDecompressBoardCalcDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDecompressBoardCalcDlg) DDX_Check(pDX, IDC_CHECK_CHANGE, m_bChange); DDX_CBString(pDX, IDC_COMBO_D1, m_csD1); DDX_CBString(pDX, IDC_COMBO_D2, m_csD2); DDX_Text(pDX, IDC_EDIT_DN, m_csDn); DDX_Text(pDX, IDC_EDIT_PRESS, m_csPress); DDX_Text(pDX, IDC_EDIT_Q, m_nQ); DDX_Radio(pDX, IDC_RADIO_UNIT1, m_iUnit); DDX_Radio(pDX, IDC_RADIO_WANT_DN, m_iWant); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDecompressBoardCalcDlg, CDialog) //{{AFX_MSG_MAP(CDecompressBoardCalcDlg) ON_BN_CLICKED(IDC_CHECK_CHANGE, OnCheckChange) ON_BN_CLICKED(IDC_RADIO_WANT_DN, OnRadioWantDn) ON_BN_CLICKED(IDC_RADIO_WANT_PRESS, OnRadioWantPress) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDecompressBoardCalcDlg message handlers BOOL CDecompressBoardCalcDlg::OnInitDialog() { CDialog::OnInitDialog(); CWnd *pWnd = GetDlgItem(IDC_COMBO_D2); pWnd->EnableWindow(FALSE); OnRadioWantDn(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDecompressBoardCalcDlg::OnOK() { UpdateData(); double v(0), nBackDn(0), nFrontDn(0), nQ(0), nTmp(0)/*ξ*/, nDn(0); if(m_bChange) nBackDn = _tstof(m_csD2)/1000; else nBackDn = _tstof(m_csD1)/1000; nFrontDn = _tstof(m_csD1); if(m_iUnit == 0) nQ = m_nQ/1000; else nQ = m_nQ / 3600; v = nQ / (0.25*PI*nBackDn*nBackDn); //流速m/s nDn = _tstof(m_csDn); if(m_iWant == 0){ // H = 10*ξ×v^2/2*g double nH = _tstof(m_csPress); //得到水流通过孔板的水头损失 把mH2O转换为kPa nTmp = nH*2*9.8/v/v; //得到ξ nTmp = sqrt(nTmp) + 1; nTmp = nTmp / 1.75; //解一元二次方程 ax2+bx+c=0 x=(-b+-sqrt(b^2-4ac))/2a double a(0), b(0), c(0), x1(0), x2(0); a = -nTmp; b = 1.175*nTmp + 1; c = -1.1; x1 = (-b+sqrt(b*b-4*a*c))/2/a; x2 = (-b-sqrt(b*b-4*a*c))/2/a; x1 = sqrt(nFrontDn*nFrontDn*x1); x2 = sqrt(nFrontDn*nFrontDn*x2); if(x1 > 0 && x1 < nFrontDn) //2个解,取DN小于管径的 m_csDn.Format(_T("%.2f"), x1); else m_csDn.Format(_T("%.2f"), x2); } else{ double n(0), n2(0); n = nFrontDn*nFrontDn/(nDn*nDn); n2 = (nDn*nDn)/(nFrontDn*nFrontDn); nTmp = (1.75*n*(1.1-n2)/(1.175-n2) -1); nTmp = nTmp*nTmp; double nH = 10*nTmp*v*v/2/9.8; nH = nH /9.8; m_csPress.Format(_T("%.2f"), nH); } UpdateData(FALSE); } void CDecompressBoardCalcDlg::OnCheckChange() { UpdateData(); CWnd *pWnd = GetDlgItem(IDC_COMBO_D2); if(m_bChange) pWnd->EnableWindow(TRUE); else pWnd->EnableWindow(FALSE); } void CDecompressBoardCalcDlg::OnRadioWantDn() { UpdateData(); CWnd *pWnd1 = GetDlgItem(IDC_EDIT_PRESS); CWnd *pWnd2 = GetDlgItem(IDC_EDIT_DN); if(m_iWant == 0){ pWnd1->EnableWindow(TRUE); pWnd2->EnableWindow(FALSE); } else{ pWnd1->EnableWindow(FALSE); pWnd2->EnableWindow(TRUE); } } void CDecompressBoardCalcDlg::OnRadioWantPress() { UpdateData(); CWnd *pWnd1 = GetDlgItem(IDC_EDIT_PRESS); CWnd *pWnd2 = GetDlgItem(IDC_EDIT_DN); if(m_iWant == 0){ pWnd1->EnableWindow(TRUE); pWnd2->EnableWindow(FALSE); } else{ pWnd1->EnableWindow(FALSE); pWnd2->EnableWindow(TRUE); } }