#include "stdafx.h" #include "CDLCKDLG.h" #include "earthwormdef.h" #include "AecDbObjXDataMap.h" IMPLEMENT_DYNAMIC(CDLCKDLG, CDialog) CDLCKDLG::CDLCKDLG(CWnd* pParent /*=NULL*/) : CDialog(IDD_DLCK_DLG, pParent) { } CDLCKDLG::~CDLCKDLG() { } void CDLCKDLG::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_wndListCables); } BEGIN_MESSAGE_MAP(CDLCKDLG, CDialog) ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CDLCKDLG::onAcadKeepFocus) ON_BN_CLICKED(IDOK, &CDLCKDLG::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CDLCKDLG::OnBnClickedCancel) ON_BN_CLICKED(IDC_BUTTON1, &CDLCKDLG::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CDLCKDLG::OnBnClickedButton2) ON_WM_CLOSE() END_MESSAGE_MAP() LONG_PTR CDLCKDLG::onAcadKeepFocus(UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if (!(rect.PtInRect(pt))) { return FALSE; } return TRUE; } BOOL CDLCKDLG::OnInitDialog() { CDialog::OnInitDialog(); CBitmap bmp; if (!bmp.LoadBitmap(IDB_BITMAPI)) { AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPI); 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_wndListCables.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW); m_wndListCables.SetImageList(&m_imageList, LVSIL_SMALL); m_wndListCables.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(1, _T("电缆规格"), LVCFMT_LEFT, 140, 120); m_wndListCables.InsertColumn(2, _T("截面"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(3, _T("外径"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(4, _T("系统"), LVCFMT_LEFT, 160, 120); m_wndListCables.InsertColumn(5, _T("句柄"), LVCFMT_LEFT, 120, 120); return TRUE; } void CDLCKDLG::ShowAllCables() { m_wndListCables.DeleteAllItems(); struct resbuf *pRb = acutBuildList(RTDXF0, _T("AEC_ROADAXISLINE"), 0); ads_name ss, ent; int nRes = acedSSGet(_T("X"), NULL, NULL, pRb, ss); acutRelRb(pRb); Adesk::Int32 nLen = 0; if (nRes == RTNORM) { acedSSLength(ss, &nLen); AcAxDocLock lock; TCHAR szHd[17]; AcDbObjectId id; AecDbObjXDataMap xData; CString sNo, sTemp; int nNo = 1, nItem = -1; for (int i = 0; i < nLen; i++) { acedSSName(ss, i, ent); acdbGetObjectId(id, ent); //确认时电缆路径 xData.Empty(); if (xData.Read(id, KEY_APP)) { /* * m_wndListCables.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(1, _T("电缆规格"), LVCFMT_LEFT, 140, 120); m_wndListCables.InsertColumn(2, _T("截面"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(3, _T("外径"), LVCFMT_LEFT, 120, 120); m_wndListCables.InsertColumn(4, _T("系统"), LVCFMT_LEFT, 160, 120); m_wndListCables.InsertColumn(5, _T("句柄"), LVCFMT_LEFT, 120, 120); */ sNo.Format(_T("%d"),nNo); nItem = m_wndListCables.InsertItem(nNo, sNo, 0); sTemp = _T(""); xData.GetAt(KEY_SPEC, sTemp); m_wndListCables.SetItemText(nItem, 1, sTemp); sTemp = _T(""); xData.GetAt(KEY_SECNAME, sTemp); m_wndListCables.SetItemText(nItem, 2, sTemp); sTemp = _T(""); xData.GetAt(PIPE_OD, sTemp); m_wndListCables.SetItemText(nItem, 3, sTemp); sTemp = _T(""); xData.GetAt(KEY_SYS, sTemp); m_wndListCables.SetItemText(nItem, 4, sTemp); id.handle().getIntoAsciiBuffer(szHd); m_wndListCables.SetItemText(nItem, 5, szHd); nNo += 1; } } acedSSFree(ss); } } void CDLCKDLG::OnBnClickedOk() { AcDbObjectId id; CString sHd; POSITION ps = m_wndListCables.GetFirstSelectedItemPosition(); if (ps != NULL) { AcAxDocLock lock; int nItem = m_wndListCables.GetNextSelectedItem(ps); if (nItem != -1) { sHd = m_wndListCables.GetItemText(nItem, 5); AcDbHandle hd(sHd); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd)) { AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kVisible); pEnt->close(); } } } //其他全部隐藏 for (int i = 0; i < m_wndListCables.GetItemCount(); i++) { if (i == nItem) continue; sHd = m_wndListCables.GetItemText(i, 5); AcDbHandle hd(sHd); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd)) { AcAxDocLock lock; AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kInvisible); pEnt->close(); } } } } } void CDLCKDLG::OnBnClickedCancel() { CString sHd; POSITION ps = m_wndListCables.GetFirstSelectedItemPosition(); if (ps != NULL) { int nItem = m_wndListCables.GetNextSelectedItem(ps); if (nItem != -1) { sHd = m_wndListCables.GetItemText(nItem, 5); AcDbObjectId id; AcDbHandle hd(sHd); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd)) { AcAxDocLock lock; AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kInvisible); pEnt->close(); } } } } } //全显 void CDLCKDLG::OnBnClickedButton1() { CString sHd; AcDbObjectId id; AcAxDocLock lock; for (int i = 0;i < m_wndListCables.GetItemCount();i++) { sHd = m_wndListCables.GetItemText(i, 5); AcDbHandle hd(sHd); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd)) { AcAxDocLock lock; AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kInvisible); pEnt->close(); } } } } //全隐 void CDLCKDLG::OnBnClickedButton2() { CString sHd; AcDbObjectId id; AcAxDocLock lock; for (int i = 0; i < m_wndListCables.GetItemCount(); i++) { sHd = m_wndListCables.GetItemText(i, 5); AcDbHandle hd(sHd); if (Acad::eOk == acdbCurDwg()->getAcDbObjectId(id, false, hd)) { AcAxDocLock lock; AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kVisible); pEnt->close(); } } } } void CDLCKDLG::OnClose() { ShowWindow(SW_HIDE); }