441 lines
9.9 KiB
C++
441 lines
9.9 KiB
C++
#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<LPNMITEMACTIVATE>(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;
|
|
}
|