#include "stdafx.h" #include "CWQTPDlg.h" IMPLEMENT_DYNAMIC(CWQTPDlg, CDialog) CWQTPDlg::CWQTPDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_WQTP_DLG, pParent) { m_idMatCur.setNull(); m_sMaterialCur = _T(""); } CWQTPDlg::~CWQTPDlg() { } void CWQTPDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_wndListCtrl); } BEGIN_MESSAGE_MAP(CWQTPDlg, CDialog) ON_BN_CLICKED(IDOK, &CWQTPDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CWQTPDlg::OnBnClickedButton1) END_MESSAGE_MAP() void CWQTPDlg::SetMaterial(LPCTSTR pszMat, const AcDbObjectId &idMat) { m_sMaterialCur = pszMat; m_idMatCur = idMat; } bool CWQTPDlg::GetMaterial(CString &szMat, AcDbObjectId &idMat) { szMat = m_sMaterialCur; idMat = m_idMatCur; return idMat.isValid(); } BOOL CWQTPDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW); m_wndListCtrl.InsertColumn(0, _T("名称"), LVCFMT_LEFT, 500, 0); ShowMaterials(); return TRUE; } void CWQTPDlg::OnBnClickedOk() { POSITION ps = m_wndListCtrl.GetFirstSelectedItemPosition(); if (ps != NULL) { int nItem = m_wndListCtrl.GetNextSelectedItem(ps); if (nItem != -1) { m_sMaterialCur = m_wndListCtrl.GetItemText(nItem, 0); DWORD_PTR dwData = m_wndListCtrl.GetItemData(nItem); m_idMatCur.setFromOldId(dwData); } } else { AfxMessageBox(_T("请选择材质条目!")); return; } CDialog::OnOK(); } #define MA_BYBLOCK _T("ByBlock") #define MA_BYLAYER _T("ByLayer") #define MA_GLOBAL _T("Global") void CWQTPDlg::ShowMaterials() { m_wndListCtrl.DeleteAllItems(); Acad::ErrorStatus es; AcDbDictionary *pMaterialDict; es = acdbCurDwg()->getMaterialDictionary(pMaterialDict, AcDb::kForRead); if (es == Acad::eOk) { int nItem = - 1; AcDbDictionaryIterator *pIt = pMaterialDict->newIterator(); if (pIt != NULL) { for (;!pIt->done();pIt->next()) { LPCTSTR pszName = pIt->name(); if (_tcscmp(pszName, MA_BYBLOCK) == 0 || _tcscmp(pszName, MA_BYLAYER) == 0 || _tcscmp(pszName, MA_GLOBAL) == 0) { continue; } AcDbObjectId id = pIt->objectId(); nItem = m_wndListCtrl.InsertItem(m_wndListCtrl.GetItemCount(),pszName); m_wndListCtrl.SetItemData(nItem, id.asOldId()); } delete pIt; } pMaterialDict->close(); } } void CWQTPDlg::OnBnClickedButton1() { ShowMaterials(); }