#include "stdafx.h" #include "NozzDlg.h" #include "CoreTools.h" //接口尺寸表 DN D N C //HG20592-97 // 公称尺寸,法兰大盘外径,法兰颈直径,厚度 //http://www.wanuo163.com/products/detail/808.html //上海瓦诺阀门有限公司 //DN extern int g_nNozzY[]; #define SET_WND_TXT(id,txt)\ {\ CWnd* pWnd = GetDlgItem(id);\ if (pWnd)\ pWnd->SetWindowText(txt);\ } #define ENABLE_WND(id,stat) \ {\ CWnd* pWnd = GetDlgItem(id);\ if (pWnd)\ pWnd->EnableWindow(stat);\ } 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_dX(0.0) , m_dY(0.0) , m_dZ(0.0) , 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); DDX_Text(pDX, IDC_EDIT1, m_dX); DDX_Text(pDX, IDC_EDIT2, m_dY); DDX_Text(pDX, IDC_EDIT3, m_dZ); } 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() 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_wndComboPre.SetCurSel(0); 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压力的法兰数据 { //从数据库中选 CoreTools::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) { SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):")); SET_WND_TXT(IDC_STATIC_W, _T("法兰外径(W):")); SET_WND_TXT(IDC_STATIC_H, _T("管嘴高度(H):")); ENABLE_WND(IDC_STATIC_O, FALSE); SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):")); } else { SET_WND_TXT(IDC_STATIC_L, _T("长度(L):")); SET_WND_TXT(IDC_STATIC_W, _T("宽度(W):")); SET_WND_TXT(IDC_STATIC_H, _T("高度(H):")); ENABLE_WND(IDC_STATIC_O, TRUE); SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):")); } } InitGroupWindowEnable(); 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) //圆口 { 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); } //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); CoreTools::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); 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); ENABLE_WND(IDC_RADIOFLANG, TRUE); ENABLE_WND(IDC_RADIO3, TRUE); ENABLE_WND(IDC_RADIO4, TRUE); m_wndEditFL.EnableWindow(FALSE); m_wndEditFH.EnableWindow(FALSE); m_wndEditFW.EnableWindow(FALSE); } else //封圆 { m_wndDnCombo.EnableWindow(FALSE); m_wndEditYH.EnableWindow(FALSE); ENABLE_WND(IDC_RADIOFLANG, FALSE); ENABLE_WND(IDC_RADIO3, FALSE); ENABLE_WND(IDC_RADIO4, 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) { SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):")); SET_WND_TXT(IDC_STATIC_L, _T("管口直径(D):")); SET_WND_TXT(IDC_STATIC_W, _T("法兰外径(W):")); SET_WND_TXT(IDC_STATIC_H, _T("管嘴高度(H):")); ENABLE_WND(IDC_STATIC_O, FALSE); SET_WND_TXT(IDC_STATIC_T, _T("法兰厚度(T):")); } else { SET_WND_TXT(IDC_STATIC_L, _T("长度(L):")); SET_WND_TXT(IDC_STATIC_W,_T("宽度(W):")); SET_WND_TXT(IDC_STATIC_H, _T("高度(H):")); ENABLE_WND(IDC_STATIC_O, TRUE); SET_WND_TXT(IDC_STATIC_T, _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; CoreTools::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; CoreTools::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::kACITab) == Adesk::kFalse) return; m_clr = clr.colorIndex(); 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; }