#include "stdafx.h" #include "XMTJDlg.h" #include "LJCSDlg.h" #include "CoreTools.h" #include "uiiado.h" #define g_sProHead _T("项目") #define IMG_PROHEAD 9 #define IMG_YEAR 10 #define IMG_PRO 11 #define IMG_SUBPRO 12 IMPLEMENT_DYNAMIC(CXMTJDlg, CDialog) CXMTJDlg::CXMTJDlg(CWnd* pParent /*=NULL*/) : CDialog(CXMTJDlg::IDD, pParent) , m_sPath(_T("")) , m_sTitles(_T("")) { m_pMySQLDb = NULL; m_sPath = _T("D:\\"); } CXMTJDlg::~CXMTJDlg() { } void CXMTJDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_wndProTree); DDX_Control(pDX, IDC_LIST1, m_wndDwgFileList); DDX_Text(pDX, IDC_EDIT3, m_sPath); DDX_Text(pDX, IDC_EDIT1, m_sTitles); } BEGIN_MESSAGE_MAP(CXMTJDlg, CDialog) ON_NOTIFY(NM_CLICK, IDC_TREE1, &CXMTJDlg::OnNMClickTree1) ON_BN_CLICKED(IDC_BUTTON2, &CXMTJDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BTREFRUSH, &CXMTJDlg::OnBnClickeRefrush) ON_MESSAGE( WM_ACAD_KEEPFOCUS, &CXMTJDlg::onAcadKeepFocus ) ON_NOTIFY(NM_CLICK, IDC_LIST1, &CXMTJDlg::OnNMClickList1) END_MESSAGE_MAP() LONG_PTR CXMTJDlg::onAcadKeepFocus( UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if(!(rect.PtInRect(pt))) { return FALSE; } return TRUE; } BOOL CXMTJDlg::OnInitDialog() { CDialog::OnInitDialog(); CBitmap bmp; if (!bmp.LoadBitmap (IDB_BITMAPPRIV)) { AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPPRIV); ASSERT (FALSE); return FALSE; } BITMAP bmpObj; bmp.GetBitmap (&bmpObj); UINT nFlags = ILC_COLOR24 | ILC_MASK; m_imageList.Create (16, bmpObj.bmHeight, nFlags, 0, 0); m_imageList.Add (&bmp, RGB (255, 0, 0)); m_wndProTree.SetImageList(&m_imageList,TVSIL_NORMAL); m_wndDwgFileList.SetImageList(&m_imageList,LVSIL_SMALL); m_wndDwgFileList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW); m_wndDwgFileList.InsertColumn(0,_T("文件名"),LVCFMT_LEFT,160); m_wndDwgFileList.InsertColumn(1,_T("创建时间"),LVCFMT_LEFT,120); m_wndDwgFileList.InsertColumn(2,_T("CAD版本"),LVCFMT_LEFT,120); m_wndDwgFileList.InsertColumn(3,_T("设计人"),LVCFMT_LEFT,80); m_wndDwgFileList.InsertColumn(4,_T("专业"),LVCFMT_LEFT,120); m_wndDwgFileList.InsertColumn(5,_T("ID"),LVCFMT_LEFT,0); if ( !InitADOServer() ) { return FALSE; } //年 //项目 //子项 ShowProTree(); return TRUE; } void CXMTJDlg::OnBnClickeRefrush() { ShowProTree(); } BOOL CXMTJDlg::InitADOServer() { m_pMySQLDb = CLJCSDlg::GetSHEarthWormConnect(); return (m_pMySQLDb != NULL) ? TRUE : FALSE; } void CXMTJDlg::ShowProTree() { m_wndProTree.DeleteAllItems(); HTREEITEM hProHead = m_wndProTree.InsertItem(g_sProHead,IMG_PROHEAD,IMG_PROHEAD); CString sSQL; sSQL = _T("select distinct CreateTime from Aec_ProDrawing order by CreateTime"); CStringArray arTimes; m_pMySQLDb->GetSelData(sSQL,arTimes); //年代分类 //2021/03/03 14:41:50.063 int nPos = -1; CString sTmp,sYear,sTxt; CStringList lstYears; for (int i = 0;i < arTimes.GetCount();i++) { sTmp = arTimes.GetAt(i); nPos = sTmp.Find(_T(' ')); if (nPos != -1) { //2021/03/03 sTxt = sTmp.Mid(0,nPos); nPos = sTxt.Find(_T('/')); if (nPos != -1) { sYear = sTxt.Mid(0,nPos); if (lstYears.Find(sYear) == NULL) { lstYears.AddTail(sYear); } } } } //先建立年代节点 HTREEITEM hYear = NULL; for (POSITION ps = lstYears.GetHeadPosition();ps != NULL;) { sYear = lstYears.GetNext(ps); hYear = m_wndProTree.InsertItem(sYear,IMG_YEAR,IMG_YEAR,hProHead); ShowYearProjs(hYear,sYear); } m_wndProTree.Expand(hProHead,TVE_EXPAND); } void CXMTJDlg::ShowYearProjs(HTREEITEM hYear,LPCTSTR pszYear) { CString sFrom,sTo; sFrom.Format(_T("%s/1/1 0:0:0"),pszYear);//2021/03/03 14:41:50.063 sTo.Format(_T("%s/12/30 23:59:59"),pszYear);//2021/03/03 14:41:50.063 CString sSQL; sSQL.Format(_T("select distinct ProTitle,SubProTitle from AEC_ProDrawing where CreateTime between CONVERT(datetime,'%s') and CONVERT(datetime,'%s')"), sFrom,sTo); CStringArray arVals; m_pMySQLDb->GetSelData(sSQL,arVals); HTREEITEM hPro = NULL,hSubPro = NULL; CMapStringToPtr mapProToItem; //项目 //-->子项 CString sProTitle,sSubProTitle; for (int i = 0;i < arVals.GetSize();i++) { if (i%2 == 0) { sProTitle = arVals.GetAt(i); sSubProTitle = arVals.GetAt(i+1); if (mapProToItem.Lookup(sProTitle,(void*&)hPro)) { hSubPro = m_wndProTree.InsertItem(sSubProTitle,IMG_SUBPRO,IMG_SUBPRO,hPro); } else { hPro = m_wndProTree.InsertItem(sProTitle,IMG_PRO,IMG_PRO,hYear); hSubPro = m_wndProTree.InsertItem(sSubProTitle,IMG_SUBPRO,IMG_SUBPRO,hPro); mapProToItem.SetAt(sProTitle,hPro); } } } } void CXMTJDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult) { CPoint point,ptcursor; ::GetCursorPos(&point); ptcursor = point; m_wndProTree.ScreenToClient(&point); UINT uFlags; HTREEITEM hItem = m_wndProTree.HitTest(point, &uFlags), hP(NULL); if (hItem != NULL) { if (hItem == m_hItemCur) { return; } m_hItemCur = hItem; int nImage = 0,nImageSel = 0; m_wndProTree.GetItemImage(hItem,nImage,nImageSel); if (nImage == IMG_SUBPRO) { //列表文件 m_wndDwgFileList.DeleteAllItems(); HTREEITEM hPro = m_wndProTree.GetParentItem(hItem); CString sPro = m_wndProTree.GetItemText(hPro); CString sSubPro = m_wndProTree.GetItemText(hItem); CString sSQL; sSQL.Format(_T("select FileName,CreateTime,acadver,Designer,ProName,GUID from Aec_ProDrawing \ where ProTitle='%s' and SubProTitle='%s' order by CreateTime"),sPro,sSubPro); CUIIValueTable vTable; m_pMySQLDb->GetSelData(sSQL,vTable); CStringArray arVals; for (int i = 0;i < vTable.GetTableLogicSize();i++) { arVals.RemoveAll(); vTable.GetValueRecord(i,arVals); if(arVals.GetSize() >= 6) { int nItem = m_wndDwgFileList.GetItemCount(); nItem = m_wndDwgFileList.InsertItem(nItem,arVals.GetAt(0),8); m_wndDwgFileList.SetItemText(nItem,1,arVals.GetAt(1)); m_wndDwgFileList.SetItemText(nItem,2,arVals.GetAt(2)); m_wndDwgFileList.SetItemText(nItem,3,arVals.GetAt(3)); m_wndDwgFileList.SetItemText(nItem,4,arVals.GetAt(4)); m_wndDwgFileList.SetItemText(nItem,5,arVals.GetAt(5)); } } } } *pResult = 0; } typedef struct OpenFileParam { TCHAR szDwgFile[MAX_PATH]; }OPENFILEPARAM; void OpenDwgFile( void *pData) { OpenFileParam* pParam = (OpenFileParam*)pData; Acad::ErrorStatus es; AcApDocument* pDoc = acDocManager->curDocument(); if (acDocManager->isApplicationContext()) { #if ARX < 21 acDocManager->pushResourceHandle(acedGetAcadResourceInstance()); #else acDocManager->pushAcadResourceHandle(); #endif es = acDocManager->appContextOpenDocument(pParam->szDwgFile); acDocManager->popResourceHandle(); acutPrintf(_T("\nEs:%d"),es); } } //打开图纸 void CXMTJDlg::OnBnClickedButton2() { UpdateData(); AcAxDocLock lock; if (m_sPath.IsEmpty()) { AfxMessageBox(_T("请选择下载路径!")); return; } //UZIP m_sPath.TrimRight(_T('\\')); POSITION ps = m_wndDwgFileList.GetFirstSelectedItemPosition(); if (ps != NULL) { int nItem = m_wndDwgFileList.GetNextSelectedItem(ps); if (nItem != -1) { CString sGUID = m_wndDwgFileList.GetItemText(nItem,5); CString sFileName = m_wndDwgFileList.GetItemText(nItem,0); CString sAcadVer = m_wndDwgFileList.GetItemText(nItem,2); int nAcadVer = 0; int nPs = sAcadVer.Find(_T('.')); if (nPs != -1) { nAcadVer = _ttoi(sAcadVer.Mid(0,nPs)); } else { nPs = sAcadVer.Find(_T(' ')); if (nPs != -1) { nAcadVer = _ttoi(sAcadVer.Mid(0,nPs)); } } CString sFullFile = m_sPath; sFullFile.TrimRight(_T('\\')); sFullFile += _T('\\'); sFullFile += sFileName; struct resbuf rb; acedGetVar(_T("acadver"),&rb); CString sAcadver1 = rb.resval.rstring; int nAcadVer1 = 0; nPs = sAcadver1.Find(_T('.')); if (nPs != -1) { nAcadVer1 = _ttoi(sAcadver1.Mid(0,nPs)); } else { nPs = sAcadver1.Find(_T(' ')); if (nPs != -1) { nAcadVer1 = _ttoi(sAcadver1.Mid(0,nPs)); } } if (nAcadVer != nAcadVer1) { AfxMessageBox(_T("选择的图纸文件格式与当前AutoCAD不匹配,打开失败!")); return; } CString sSQL; sSQL.Format(_T("select Package from Aec_ProDrawing where GUID='%s'"),sGUID); if ( m_pMySQLDb->GetSelBlob(sSQL,sFullFile) > 0) { CString sDwgFile = sFullFile; sDwgFile.MakeLower(); sDwgFile.Replace(_T(".zip"),_T(".dwg")); CStringArray arFilesGet; CoreTools::unZipFile(sFullFile, sDwgFile,arFilesGet); ::DeleteFile(sFullFile); if (arFilesGet.GetSize() > 0) { sDwgFile = arFilesGet.GetAt(0); CString sFile2; //判断文件是否打开 AcApDocumentIterator* pIt = acDocManager->newAcApDocumentIterator(); if (pIt != NULL) { for (;pIt->done();pIt->step()) { AcApDocument* pDoc = pIt->document(); sFile2 = pDoc->fileName(); if ( sDwgFile.CompareNoCase(sFile2) == 0 ) { sSQL.Format(_T("选择的文件已经打开!\n%s"),sDwgFile); AfxMessageBox(sSQL); return; } } delete pIt; } static OpenFileParam pParam; _tcscpy(pParam.szDwgFile,(LPCTSTR)sDwgFile); acDocManager->executeInApplicationContext(OpenDwgFile, (void *)&pParam); } } } } } BOOL CXMTJDlg::OnCommand(WPARAM wParam, LPARAM lParam) { switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: case IDCLOSE: { ShowWindow(SW_HIDE); } return TRUE; default: break; } return CDialog::OnCommand(wParam, lParam); } void CXMTJDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); if (pNMItemActivate != NULL) { if ( pNMItemActivate->iItem != -1) { int nSel = pNMItemActivate->iItem; CString sGUID; sGUID = m_wndDwgFileList.GetItemText(nSel,5); UpdateData(); CString sSQL; sSQL.Format(_T("select Titles from Aec_ProDrawing where GUID='%s'"),sGUID); m_pMySQLDb->GetSelData(sSQL,m_sTitles); UpdateData(FALSE); } } *pResult = 0; }