#include "stdafx.h" #include "NozzDlg.h" #include "aecPipeSupport.h" //接口尺寸表 DN D N C //HG20592-97 // 公称尺寸,法兰大盘外径,法兰颈直径,厚度 //http://www.wanuo163.com/products/detail/808.html //上海瓦诺阀门有限公司 //DN int g_nNozzY[] = { 6,8,10,15,20 ,25,32,40,50,65 ,80,100,125,150,200 ,250,300,350,400,450 ,500,600 ,700,800,900,1000,1200 ,1400,1600,1800,2000 ,2200,2400,2600,2800,3000 ,0 }; IMPLEMENT_DYNAMIC(CNozzDlg, CDialog) CNozzDlg::CNozzDlg(CWnd* pParent /*=NULL*/) : CDialog(CNozzDlg::IDD, pParent) , m_dDn(0) , m_dYH(0) , m_dFL(100) , m_dFH(200) , m_dFW(100) , m_dYMinh(0) , m_dO(0) , m_dT(0) , m_nCurSel(0) , m_bRadio(FALSE) , m_bNozzCmd(FALSE) , m_bTwoFlang(FALSE) , m_bHVACCir(FALSE) , m_bTwoFlang1(FALSE) , m_pData(NULL) , m_clr(256) { memset(&m_xNozzData,0,sizeof(AecEqui::XNozz)); GET_CACHE(CNozzDlg , %f%f%f%f%f%f%f%f%d%d%d%d%d%d%d , &m_dDn , &m_dYH , &m_dFL , &m_dFH , &m_dFW , &m_dYMinh , &m_dO , &m_dT , &m_nCurSel , &m_bRadio , &m_bNozzCmd , &m_bTwoFlang , &m_bHVACCir , &m_bTwoFlang1 , &m_clr); } CNozzDlg::~CNozzDlg() { } void CNozzDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Radio(pDX, IDC_RADIOY, m_bRadio); DDX_Control(pDX, IDC_COMBOINF, m_wndDnCombo); DDX_Control(pDX, IDC_EDITH, m_wndEditYH); DDX_Text(pDX, IDC_EDITH, m_dYH); DDX_Control(pDX, IDC_EDITFL, m_wndEditFL); DDX_Text(pDX, IDC_EDITFL, m_dFL); DDX_Control(pDX, IDC_EDITFH, m_wndEditFH); DDX_Text(pDX, IDC_EDITFH, m_dFH); DDX_Control(pDX, IDC_EDITFW, m_wndEditFW); DDX_Text(pDX, IDC_EDITFW, m_dFW); DDX_Text(pDX, IDC_EDITMINH, m_dYMinh); DDX_Control(pDX, IDC_EDITMINH, m_wndEditMinH); DDX_CBIndex(pDX, IDC_COMBOINF, m_nCurSel); DDX_Radio(pDX, IDC_RADIOW, m_bNozzCmd); DDX_Check(pDX, IDC_CHECKHVACCIR, m_bHVACCir); DDX_Text(pDX, IDC_EDITFO, m_dO); DDX_Text(pDX, IDC_EDITFT, m_dT); DDX_Control(pDX, IDC_EDITFO, m_wndEditFO); DDX_Radio(pDX, IDC_RADIOFLANG, m_bTwoFlang); DDX_Control(pDX, IDC_COMBOPRE, m_wndComboPre); } BEGIN_MESSAGE_MAP(CNozzDlg, CDialog) ON_BN_CLICKED(IDOK, &CNozzDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_RADIOY, &CNozzDlg::OnBnClickedRadioy) ON_BN_CLICKED(IDC_RADIOF, &CNozzDlg::OnBnClickedRadiof) ON_CBN_SELCHANGE(IDC_COMBOINF, &CNozzDlg::OnCbnSelchangeComboinf) ON_BN_CLICKED(IDC_CHECKHVACCIR, &CNozzDlg::OnBnClickedCheckhvaccir) ON_BN_CLICKED(IDCANCEL, &CNozzDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_RADIOH, &CNozzDlg::OnBnClickedRadioh) ON_CBN_SELCHANGE(IDC_COMBOPRE, &CNozzDlg::OnCbnSelchangeCombopre) ON_BN_CLICKED(IDC_STATIC_COLOR, OnStaticColor) ON_WM_CTLCOLOR() ON_BN_CLICKED(IDC_RADIOE, &CNozzDlg::OnBnClickedRadioe) ON_BN_CLICKED(IDC_RADIO4, &CNozzDlg::OnBnClickedRadio4) ON_BN_CLICKED(IDC_RADIO24, &CNozzDlg::OnBnClickedRadio24) ON_BN_CLICKED(IDC_RADIO25, &CNozzDlg::OnBnClickedRadio25) ON_BN_CLICKED(IDC_RADIO26, &CNozzDlg::OnBnClickedRadio26) END_MESSAGE_MAP() //pNozz->szResvr : N=%d;P=%d;H=%d; static bool ParaseReserver(const char* pszResvr,double& dP,double& dN,double& dYMinh) { bool bOk = false; CString sTemp; CString sText = pszResvr; int nIndex = sText.Find(_T("N=")); int nSp = sText.Find(_T(";"),nIndex); if (nIndex != -1 && nSp != -1 && nSp > nIndex) { sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2); dN = _ttof(sTemp); bOk = true; } nIndex = sText.Find(_T("P=")); nSp = sText.Find(_T(";"),nIndex); if (nIndex != -1 && nSp != -1 && nSp > nIndex) { sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2); dP = _ttof(sTemp); bOk = true; } nIndex = sText.Find(_T("H=")); nSp = sText.Find(_T(";"),nIndex); if (nIndex != -1 && nSp != -1 && nSp > nIndex) { sTemp = sText.Mid(nIndex + 2,nSp - nIndex - 2); dYMinh = _ttof(sTemp); bOk = true; } return bOk; } BOOL CNozzDlg::OnInitDialog() { CDialog::OnInitDialog(); m_Db.InitADOServer(FilePath::GetSysDir() + _T("\\plumbing.db")); InitComboDN(); m_bHVACCir = FALSE; if (m_pData != NULL) { AecEqui::XNozz* pNozz = (AecEqui::XNozz*)m_pData; short nType = pNozz->nType; m_bNozzCmd = pNozz->nCmd; m_bRadio = nType; m_bTwoFlang = pNozz->bTwoFlags; if (m_bRadio > 1) m_bRadio = 1;//风管系统 2 圆口 if (nType == 0) //GB 公称圆口 { m_bHVACCir = FALSE; CString sDn; sDn.Format(_T("%d"),(int)pNozz->dVal1); int nIndex = m_wndDnCombo.FindStringExact(0,sDn); if (nIndex != -1) { m_nCurSel = nIndex; m_wndDnCombo.SetCurSel(nIndex); } /*m_xNozzData.dVal1 = 1.0 * nDn; m_xNozzData.dVal2 = 1.0 * nD; m_xNozzData.dVal3 = 1.0 * nN; m_xNozzData.dVal4 = 1.0 * nC; m_xNozzData.dVal5 = m_dYH;*/ //高度 m_dYH = pNozz->dVal5; //最小高度,就是法兰的高度 //pNozz->szResvr : N=%d;P=%d;H=%d //兼容以前的管嘴,预留的内容为 法兰颈,压力,法兰高度 !!!!! double dP = 1.0,dN = 0.0,dH = 0.0,dWD = 0.0,dC; if ( !ParaseReserver(pNozz->szResvr,dP,dN,m_dYMinh) )//默认为1.0压力的法兰数据 { //从数据库中选 TDbPipeSupport::QueryFlangData(&m_Db,pNozz->dVal1,dP,dWD,dC,m_dYMinh,dN); UpdateData(FALSE); } else//有,根据压力选择 { UpdateData(FALSE); //0 1 2 3 CString sPressure; for (int i = 0;i < m_wndComboPre.GetCount();i++) { m_wndComboPre.GetLBText(i,sPressure); if ( fabs(_ttof(sPressure) - dP) < 1.e-3) { m_wndComboPre.SetCurSel(i); //设置压力 break; } } } } else //风管 圆口 + 方口 { m_dFL = pNozz->dVal1; m_dFW = pNozz->dVal2; m_dFH = pNozz->dVal3; m_dO = pNozz->dVal4; m_dT = pNozz->dVal5; if (nType == 2) //圆口 { m_bHVACCir = TRUE; } } UpdateData(FALSE); if (m_bHVACCir) { GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("管口直径(D):")); GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("法兰外径(W):")); GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("管嘴高度(H):")); GetDlgItem(IDC_STATIC_O)->EnableWindow(FALSE); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):")); } else { GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("长度(L):")); GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("宽度(W):")); GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("高度(H):")); GetDlgItem(IDC_STATIC_O)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):")); } } InitGroupWindowEnable(); if (m_wndComboPre.GetCurSel() == -1) { if (m_wndComboPre.GetCount() > 0) m_wndComboPre.SetCurSel(0); } if (m_bNozzCmd == 2) { GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("电压(&V):")); GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("电流(&A):")); GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_SHOW); } return TRUE; } void CNozzDlg::InitComboDN() { m_wndDnCombo.ResetContent(); CStringArray strArr; CString sql(_T("select distinct [公称直径] from aecflangedata order by [公称直径] asc")); m_Db.GetSelData(sql, strArr); if (!strArr.IsEmpty()) { int sabi; for (int i = 0; i < strArr.GetCount(); ++i) { sabi = m_wndDnCombo.InsertString(i, strArr[i]); m_wndDnCombo.SetItemData(sabi,i); } } else { int i = 0, nIndex = 0; CString sText; while (TRUE) { if (g_nNozzY[i] == 0) break; sText.Format(_T("%d"), g_nNozzY[i]); nIndex = m_wndDnCombo.InsertString(i, sText); m_wndDnCombo.SetItemData(nIndex, i); i++; } } if (m_wndDnCombo.GetCount() >= 10) m_wndDnCombo.SetCurSel(10); m_nCurSel = 10; } void CNozzDlg::OnBnClickedOk() { UpdateData(); //1. 数据有效性验证 if (!m_bRadio) //圆口 0 { if (m_dYH - m_dYMinh < -1.e-3) //可以等于 { AfxMessageBox(_T("接口尺寸高度过小,请输入接口高度尺寸!")); return; } } else //方口 { if (m_bHVACCir) { if (m_dFL < 1.e-3 || m_dFH < 1.e-3 || m_dFW < 1.e-3 || m_dT < 1.e-3) { AfxMessageBox(_T("风管接口尺寸过小,请输入方管接口尺寸!")); return; } if (m_dFW - m_dFL < 1.e-3) { AfxMessageBox(_T("风管法兰外径尺寸过小,请输入法兰外径尺寸!")); return; } } else { if (m_dFL < 1.e-3 || m_dFH < 1.e-3 || m_dFW < 1.e-3 || m_dO < 1.e-3 || m_dT < 1.e-3) { AfxMessageBox(_T("方管接口尺寸过小,请输入方管接口尺寸!")); return; } } } m_xNozzData.nType = m_bRadio; if (m_bHVACCir) { m_xNozzData.nType = 2; } m_xNozzData.nCmd = m_bNozzCmd; CString sPre = _T("1.0"); int nSel = m_wndComboPre.GetCurSel(); if (nSel != -1) { m_wndComboPre.GetLBText(nSel,sPre); } if (this->m_bTwoFlang >= 2)//点式管嘴 { m_dYMinh = 0; m_dYH = 0; } //2.填充数据 if (!m_bRadio) //圆口 { if (m_nCurSel != -1) { CString sText; m_wndDnCombo.GetLBText(m_nCurSel,sText); int nRow = (int)m_wndDnCombo.GetItemData(m_nCurSel); if (nRow != -1) { //接口尺寸表 DN D N C //查数据库 //公称尺寸,法兰大盘外径,法兰颈直径,厚度 int nDn = _ttoi(sText); double nD = 0.0,nN = 0.0,nC = 0.0, dYMinh(.0); TDbPipeSupport::QueryFlangData(&m_Db,nDn,_ttof(sPre),nD,nC,dYMinh,nN); m_xNozzData.dVal1 = 1.0 * nDn; m_xNozzData.dVal2 = 1.0 * nD; m_xNozzData.dVal3 = 1.0 * nN; m_xNozzData.dVal4 = 1.0 * (nC = nC > m_dYMinh ? m_dYMinh : nC); if (this->m_bTwoFlang >= 2) { m_xNozzData.dVal4 = 0.0; m_xNozzData.dVal5 = 0.0; } else { m_xNozzData.dVal5 = m_dYH; } //兼容之前的,放到szResvr中 sprintf(m_xNozzData.szResvr,"N=%d;P=%g;H=%d;",(int)nN,_ttof(sPre),(int)m_dYMinh); } } } else { m_xNozzData.dVal1 = m_dFL; m_xNozzData.dVal2 = m_dFW; m_xNozzData.dVal3 = m_dFH; m_xNozzData.dVal4 = m_dO; m_xNozzData.dVal5 = m_dT; } m_xNozzData.bTwoFlags = m_bTwoFlang; if (m_pData != NULL) { memcpy(m_pData,&m_xNozzData,sizeof(AecEqui::XNozz)); } SET_CACHE(CNozzDlg , %f%f%f%f%f%f%f%f%d%d%d%d%d%d%d , m_dDn , m_dYH , m_dFL , m_dFH , m_dFW , m_dYMinh , m_dO , m_dT , m_nCurSel , m_bRadio , m_bNozzCmd , m_bTwoFlang , m_bHVACCir , m_bTwoFlang1 , m_clr); OnOK(); } AecEqui::XNozz* CNozzDlg::GetNozzData() { return &m_xNozzData; } void CNozzDlg::OnBnClickedRadioy() { UpdateData(); InitGroupWindowEnable(); } void CNozzDlg::OnBnClickedRadiof() { UpdateData(); InitGroupWindowEnable(); } void CNozzDlg::InitGroupWindowEnable() { if (!m_bRadio) //GB圆 { m_wndDnCombo.EnableWindow(TRUE); m_wndEditYH.EnableWindow(TRUE); GetDlgItem(IDC_RADIOFLANG)->EnableWindow(TRUE); GetDlgItem(IDC_RADIO3)->EnableWindow(TRUE); GetDlgItem(IDC_RADIO4)->EnableWindow(TRUE); m_wndEditFL.EnableWindow(FALSE); m_wndEditFH.EnableWindow(FALSE); m_wndEditFW.EnableWindow(FALSE); } else //封圆 { m_wndDnCombo.EnableWindow(FALSE); m_wndEditYH.EnableWindow(FALSE); GetDlgItem(IDC_RADIOFLANG)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO3)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO4)->EnableWindow(FALSE); m_wndEditFL.EnableWindow(TRUE); m_wndEditFH.EnableWindow(TRUE); m_wndEditFW.EnableWindow(TRUE); if (m_bHVACCir) { m_wndEditFO.EnableWindow(FALSE); } } } void CNozzDlg::OnBnClickedCheckhvaccir() { UpdateData(); if (m_bHVACCir) { GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("管口直径(D):")); GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("法兰外径(W):")); GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("管嘴高度(H):")); GetDlgItem(IDC_STATIC_O)->EnableWindow(FALSE); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):")); } else { GetDlgItem(IDC_STATIC_L)->SetWindowText(_T("长度(L):")); GetDlgItem(IDC_STATIC_W)->SetWindowText(_T("宽度(W):")); GetDlgItem(IDC_STATIC_H)->SetWindowText(_T("高度(H):")); GetDlgItem(IDC_STATIC_O)->EnableWindow(TRUE); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(T):")); } } void CNozzDlg::OnBnClickedCancel() { OnCancel(); } void CNozzDlg::OnBnClickedRadioh() { } void CNozzDlg::OnCbnSelchangeComboinf() { //选择管子公称直径 UpdateData(); int nSel = m_wndDnCombo.GetCurSel(); if (nSel != -1) { CString sTemp,sPre = _T("1.0"); m_wndDnCombo.GetLBText(nSel,sTemp); nSel = m_wndComboPre.GetCurSel(); if (nSel != -1) { m_wndComboPre.GetLBText(nSel,sPre); } double dWD = 0.0,dWh = 0.0,dN = 0.0; TDbPipeSupport::QueryFlangData(&m_Db,_ttof(sTemp),_ttof(sPre),dWD,dWh,m_dYMinh,dN); m_dYH = 2.0 * m_dYMinh; UpdateData(FALSE); } } void CNozzDlg::OnCbnSelchangeCombopre() { //选择压力等级 UpdateData(); int nSel = m_wndDnCombo.GetCurSel(); if (nSel != -1) { CString sTemp,sPre = _T("1.0"); m_wndDnCombo.GetLBText(nSel,sTemp); nSel = m_wndComboPre.GetCurSel(); if (nSel != -1) { m_wndComboPre.GetLBText(nSel,sPre); } double dWD = 0.0,dWh = 0.0,dN = 0.0; TDbPipeSupport::QueryFlangData(&m_Db,_ttof(sTemp),_ttof(sPre),dWD,dWh,m_dYMinh,dN); m_dYH = 2.0 * m_dYMinh; UpdateData(FALSE); } } void CNozzDlg::OnStaticColor() { AcCmColor clr; #if ARX < 24 clr.setColorMethod(AcCmEntityColor::kByACI); #endif clr.setColorIndex(256); if (acedSetColorDialogTrueColor(clr, Adesk::kTrue, clr, (AcCm::DialogTabs)(AcCm::kACITab)) == Adesk::kFalse) return; Invalidate(); } HBRUSH CNozzDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR) { CRect rc; pWnd->GetClientRect(rc); pDC->FillSolidRect(rc, acedGetRGB(m_clr)); } } return hbr; } void CNozzDlg::OnBnClickedRadioe() { this->UpdateData(); if (m_bNozzCmd == 2)//电气 { GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("电压(&V):")); GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("电流(&A):")); GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_SHOW); } else { GetDlgItem(IDC_STATIC_O)->SetWindowText(_T("卷边(&O)::")); GetDlgItem(IDC_STATIC_VV)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_T)->SetWindowText(_T("法兰厚度(&T):")); GetDlgItem(IDC_STATIC_AA)->ShowWindow(SW_HIDE); } } void CNozzDlg::OnBnClickedRadio4() { if (m_bTwoFlang >= 2) { m_dYH = 0; m_dYMinh = 0; UpdateData(FALSE); } } void CNozzDlg::OnBnClickedRadio24() { if (m_bTwoFlang >= 2) { m_dYH = 0; m_dYMinh = 0; UpdateData(FALSE); } } void CNozzDlg::OnBnClickedRadio25() { if (m_bTwoFlang >= 2) { m_dYH = 0; m_dYMinh = 0; UpdateData(FALSE); } } void CNozzDlg::OnBnClickedRadio26() { if (m_bTwoFlang >= 2) { m_dYH = 0; m_dYMinh = 0; UpdateData(FALSE); } }