// ValveSpecDlg.cpp : implementation file // #include "stdafx.h" #include "tapi.h" //#include "cbclass.h" #include "ValveSpecDlg.h" #include "SelectBlkDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //#ifdef _WIN64 #include "TGAs.h" //#endif void SetValveSpec() { CTemporaryResourceOverride vTemp; CValveSpecDlg dlg; dlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CValveSpecDlg dialog CValveSpecDlg::CValveSpecDlg(CWnd* pParent /*=NULL*/) : CDialog(CValveSpecDlg::IDD, pParent) { //{{AFX_DATA_INIT(CValveSpecDlg) m_iCurIndex = -1; //}}AFX_DATA_INIT m_iOld = -1; } void CValveSpecDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CValveSpecDlg) DDX_Control(pDX, IDC_LIST_MAT, m_listValve); DDX_LBIndex(pDX, IDC_LIST_MAT, m_iCurIndex); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CValveSpecDlg, CDialog) //{{AFX_MSG_MAP(CValveSpecDlg) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) ON_WM_PAINT() ON_LBN_SELCHANGE(IDC_LIST_MAT, OnSelchangeListMat) ON_BN_CLICKED(IDC_BUTTON_REMOVE, OnButtonRemove) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CValveSpecDlg message handlers BOOL CValveSpecDlg::OnInitDialog() { CDialog::OnInitDialog(); GetValveSpecList(); int len = m_lstValve.Length(); for(int i=0;iMoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("name"), csName); GET_FIELD(pTable, _T("blkname"), csBlkName); int len = m_lstValve.Length(); BOOL bFind = FALSE; for(int i=0;im_csDesName = csName; pValve->m_csRecord = csBlkName; m_lstValve.Append(pValve); } } } void CValveSpecDlg::UpdateGrid() { if(m_iCurIndex < 0) return; m_grid.Clear(); CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord; CodeBase db; XString fullFile; if(!FindFile(_T("valve.dbf"), fullFile)) { AfxMessageBox(_T("对不起,没有发现valve.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(!pTable) return; CString csBlkName2, csDn, csLen; for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("blkname"), csBlkName2); GET_FIELD(pTable, _T("dn"), csDn); GET_FIELD(pTable, _T("length"), csLen); if(_tcsicmp(csBlkName, csBlkName2) == 0){ int idx = m_grid.GetRowNum(); m_grid.AppendRow(); m_grid.GetCell(idx, 0).SetText(csDn); m_grid.GetCell(idx, 1).SetText(csLen); } } } void CValveSpecDlg::OnButtonAdd() { CString csSldName; CTemporaryResourceOverride vTemp; CSelectBlkDlg dlg; dlg.m_csTkName = _T("VALVE"); dlg.m_csType = _T("双线阀门"); CWnd *pWnd = GetDlgItem(IDC_BUTTON_ADD); CRect rect; dlg.m_staticSlide.m_csCurRecord = csSldName; pWnd->GetWindowRect(&rect); dlg.m_ptBase = rect.BottomRight(); if(dlg.DoModal() == IDOK){ CString csRet = dlg.m_staticSlide.m_csCurRecord; CString csDes = dlg.m_staticSlide.m_csCurDesName; XString xsTKName, xsRocord, xsTmp; SplitSlbName(csRet, xsTKName, xsRocord); AcDbDatabase *dwg=acdbCurDwg(); AcAxDocLock docLock(dwg); VERIFY(docLock.lockStatus() == Acad::eOk); if(LoadDwbBlock((const TCHAR*)xsTKName, (const TCHAR*)xsRocord, xsTmp) != RTNORM) return; int len = m_lstValve.Length(); BOOL bFind = FALSE; for(int i=0;im_csDesName = csDes; pValve->m_csRecord = xsTmp; m_lstValve.Append(pValve); CodeBase db; XString fullFile; if(!FindFile(_T("valve.dbf"), fullFile)) { AfxMessageBox(_T("对不起,没有发现valve.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(pTable) { pTable->AppendBegin(); SET_FIELD(pTable, _T("name"), (const TCHAR*)csDes); SET_FIELD(pTable, _T("blkname"), xsTmp); pTable->AppendEnd(); } m_listValve.AddString(csDes); } } } void CValveSpecDlg::OnPaint() { CPaintDC dc(this); // device context for painting OpenSlide(); } void CValveSpecDlg::OpenSlide() { UpdateData(TRUE); CWnd* pWnd = GetDlgItem(IDC_STATIC_PREVIEW); if(m_iCurIndex > -1){ CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord; CString csTK, csRecord, csPath; SplitBlkStr(csBlkName, csTK, csRecord); int idx = csRecord.Find(_T("(")); if(idx > -1){ csRecord = csRecord.Left(idx); } csPath = g_csDwbPath + csTK + _T("(") + csRecord + _T(")");//上华系统图库路径 DrawSlide((const TCHAR*)csPath, pWnd); } } void CValveSpecDlg::OnSelchangeListMat() { UpdateData(TRUE); OpenSlide(); SaveDbf(); UpdateGrid(); m_iOld = m_iCurIndex; } void CValveSpecDlg::SaveDbf() { if(m_iOld < 0) return; CodeBase db; XString fullFile; if(!FindFile(_T("valve.dbf"), fullFile)) { AfxMessageBox(_T("对不起,没有发现valve.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(!pTable) return; CString csBlkName2, csDn2, csLen2; CString csBlkName = m_lstValve[m_iOld]->m_csRecord; CString csName = m_lstValve[m_iOld]->m_csDesName; for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csDn = (*pRow)[0].GetText(); CString csLen = (*pRow)[1].GetText(); if(csDn == _T("")) continue; BOOL bModify = FALSE; for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("blkname"), csBlkName2); GET_FIELD(pTable, _T("dn"), csDn2); if(_tcsicmp(csBlkName, csBlkName2) == 0 && _tcsicmp(csDn2, csDn) == 0){ SET_FIELD(pTable, _T("length"), (const TCHAR*)csLen); bModify = TRUE; break; } } if(bModify) continue; pTable->AppendBegin(); SET_FIELD(pTable, _T("name"), (const TCHAR*)csName); SET_FIELD(pTable, _T("blkname"), (const TCHAR*)csBlkName); SET_FIELD(pTable, _T("dn"), (const TCHAR*)csDn); SET_FIELD(pTable, _T("length"), (const TCHAR*)csLen); pTable->AppendEnd(); } for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("blkname"), csBlkName2); GET_FIELD(pTable, _T("dn"), csDn2); if(_tcsicmp(csBlkName, csBlkName2) == 0){ BOOL bFind = FALSE; for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){ WDGridRow *pRow = m_grid.CurRow(); CString csDn = (*pRow)[0].GetText(); if(_tcsicmp(csDn, csDn2) == 0){ bFind = TRUE; break; } } if(!bFind) pTable->Delete(); } } } void CValveSpecDlg::OnButtonRemove() { UpdateData(TRUE); if(m_iCurIndex < 0) return; CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord; m_lstValve.Remove(m_iCurIndex); m_listValve.DeleteString(m_iCurIndex); CodeBase db; XString fullFile; if(!FindFile(_T("valve.dbf"), fullFile)) { AfxMessageBox(_T("对不起,没有发现valve.dbf文件!")); return; } XDbfTable *pTable = db.Open(fullFile); if(!pTable) return; CString csBlkName2; for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){ GET_FIELD(pTable, _T("blkname"), csBlkName2); if(_tcsicmp(csBlkName, csBlkName2) == 0) pTable->Delete(); } m_iCurIndex = -1; m_iOld = -1; UpdateData(FALSE); } void CValveSpecDlg::OnOK() { SaveDbf(); CDialog::OnOK(); }