// LayerDlg.cpp : implementation file // #include "stdafx.h" //#include //#include #include "tapi.h" #include "LayerDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLayerDlg dialog int GetLayerColor(const TCHAR *szLayer) { XString fullFile; if(FindFile(_T("layerdef.dat"), fullFile)) { FILE *fp=fopen(_AS(fullFile), "r"); if(!fp) return -1; while(!feof(fp)) { char sBuf[256]=""; TCHAR cName[256]=_T(""), eName[256]=_T(""), sColor[256]=_T(""); fgets(sBuf, 255, fp); if(sBuf[0]) { CT_strnth(TString(sBuf), 1, cName); CT_strnth(TString(sBuf), 2, eName); CT_strnth(TString(sBuf), 3, sColor); } if(_tcscmp(szLayer, eName) == 0){ fclose(fp); int nColor=_ttoi(sColor); return nColor; } } fclose(fp); } return -1; } void SetLayerColor(const TCHAR *szLayer, int iColor) { DList lstLayer; XString fullFile; if(FindFile(_T("layerdef.dat"), fullFile)) { FILE *fp=fopen(_AS(fullFile), "r"); if(!fp) return; while(!feof(fp)) { char sBuf[256]=""; TCHAR cName[256]=_T(""), eName[256]=_T(""), sColor[256]=_T(""); fgets(sBuf, 255, fp); if(sBuf[0]) { CT_strnth(TString(sBuf), 1, cName); CT_strnth(TString(sBuf), 2, eName); CT_strnth(TString(sBuf), 3, sColor); } if(cName[0] && eName[0]) { int nColor=_ttoi(sColor); lstLayer.Append(new CLayerData(eName, cName, nColor)); } } fclose(fp); } int len = lstLayer.Length(); for(int i=0;im_csEName, szLayer) == 0){ lstLayer[i]->m_iColor = iColor; break; } } FILE *fp = fopen(_AS(fullFile), "w"); if(!fp) return; len = lstLayer.Length(); for(i=0; i < len; i++){ CString csColor; csColor.Format(_T("%d"), lstLayer[i]->m_iColor); CString csTmp = lstLayer[i]->m_csCName + _T(" ") + lstLayer[i]->m_csEName + _T(" ") + csColor + _T("\n"); fputs(_AS(csTmp), fp); } fclose(fp); AcDbObjectId idLayer = GetLayerIdFromString(szLayer); if(!idLayer) return; OPENOBJ_BEGIN(idLayer, AcDb::kForWrite, AcDbLayerTableRecord, pLayer); if(pLayer) { AcCmColor color; color.setColorIndex(iColor); pLayer->setColor(color); } else{ AfxMessageBox(_T("层写保护!")); } OPENOBJ_END(); } void LayerMan() { CAcModuleResourceOverride vTemp; CLayerDlg dlg; dlg.DoModal(); return; } int CLayerDlg::m_iSel = 0; CLayerDlg::CLayerDlg(CWnd* pParent /*=NULL*/) : CDialog(CLayerDlg::IDD, pParent) { m_iColor = 0; //{{AFX_DATA_INIT(CLayerDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CLayerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLayerDlg) DDX_Control(pDX, IDC_BUTTON_HELP, m_butHelp); DDX_Control(pDX, IDC_LIST_LAYER, m_listLayer); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLayerDlg, CDialog) //{{AFX_MSG_MAP(CLayerDlg) ON_NOTIFY(NM_DBLCLK, IDC_LIST_LAYER, OnDblclkListLayer) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_LAYER, OnItemchangedListLayer) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLayerDlg message handlers BOOL CLayerDlg::OnInitDialog() { CDialog::OnInitDialog(); m_butHelp.SetIcon(IDI_HELP); m_butHelp.SetHelpKey(_T("图层颜色")); XString fullFile; if(FindFile(_T("layerdef.dat"), fullFile)) { FILE *fp=fopen(_AS(fullFile), "r"); if(!fp) return TRUE; while(!feof(fp)) { char sBuf[256]=""; TCHAR cName[256]=_T(""), eName[256]=_T(""), sColor[256]=_T(""); fgets(sBuf, 255, fp); if(sBuf[0]) { CT_strnth(TString(sBuf), 1, cName); CT_strnth(TString(sBuf), 2, eName); CT_strnth(TString(sBuf), 3, sColor); } if(cName[0] && eName[0]) { int nColor=_ttoi(sColor); m_lstLayer.Append(new CLayerData(eName, cName, nColor)); } } fclose(fp); } m_listLayer.SetExtendedStyle(LVS_EX_FULLROWSELECT); m_listLayer.InsertColumn ( 0, _T("中文层名"), LVCFMT_CENTER, 120 ); m_listLayer.InsertColumn ( 1, _T("英文层名"), LVCFMT_CENTER, 120 ); m_listLayer.InsertColumn ( 2, _T("颜色"), LVCFMT_CENTER, 70 ); LoadList(); m_listLayer.SetItemState(m_iSel, LVIS_SELECTED, LVIS_SELECTED); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLayerDlg::LoadList() { m_listLayer.DeleteAllItems(); for(int i=0;im_iColor != 0) csCol.Format(_T("%d"), m_lstLayer[i]->m_iColor); else csCol = _T(""); if(m_lstLayer[i]->m_iColor == 1) csCol = _T("红"); else if(m_lstLayer[i]->m_iColor == 2) csCol = _T("黄"); else if(m_lstLayer[i]->m_iColor == 3) csCol = _T("绿"); else if(m_lstLayer[i]->m_iColor == 4) csCol = _T("青"); else if(m_lstLayer[i]->m_iColor == 5) csCol = _T("蓝"); else if(m_lstLayer[i]->m_iColor == 6) csCol = _T("紫"); else if(m_lstLayer[i]->m_iColor == 7) csCol = _T("白"); m_listLayer.InsertItem ( i, m_lstLayer[i]->m_csCName, 0 ); m_listLayer.SetItemText ( i, 1, m_lstLayer[i]->m_csEName); m_listLayer.SetItemText ( i, 2, csCol); } } void CLayerDlg::OnDblclkListLayer(NMHDR* pNMHDR, LRESULT* pResult) { acedSetColorDialog(m_iColor, Adesk::kFalse, m_iColor); m_lstLayer[m_iSel]->m_iColor = m_iColor; DrawStatic(); LoadList(); m_listLayer.SetItemState(m_iSel, LVIS_SELECTED, LVIS_SELECTED); *pResult = 0; } void CLayerDlg::DrawStatic() { CWnd* pWnd = GetDlgItem(IDC_STATIC_LAYERCOLOR); CRect rect; pWnd->GetClientRect(rect); CDC* pDC = pWnd->GetDC(); CBrush* pNewBrush = new CBrush; pNewBrush->CreateSolidBrush(acdbGetRGB(m_iColor)); CBrush* pOldBrush = pDC->SelectObject(pNewBrush); pDC->Rectangle(rect); pDC->SelectObject(pOldBrush); pWnd->ReleaseDC(pDC); delete pNewBrush; } void CLayerDlg::OnItemchangedListLayer(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; int nSel = pNMListView->iItem; m_iColor = m_lstLayer[nSel]->m_iColor; DrawStatic(); m_iSel = nSel; *pResult = 0; } void CLayerDlg::OnPaint() { CPaintDC dc(this); // device context for painting DrawStatic(); // Do not call CDialog::OnPaint() for painting messages } void CLayerDlg::OnOK() { XString fullFile; if(!FindFile(_T("layerdef.dat"), fullFile)) return; FILE *fp = fopen(_AS(fullFile), "w"); if(!fp) return; int len = m_lstLayer.Length(); for(int i=0; i < len; i++){ CString csColor; csColor.Format(_T("%d"), m_lstLayer[i]->m_iColor); CString csTmp = m_lstLayer[i]->m_csCName + _T(" ") + m_lstLayer[i]->m_csEName + _T(" ") + csColor + _T("\n"); fputs(_AS(csTmp), fp); AcDbObjectId idLayer = GetLayerIdFromString((const TCHAR*)m_lstLayer[i]->m_csEName); OPENOBJ_BEGIN(idLayer, AcDb::kForWrite, AcDbLayerTableRecord, pLayer); if(pLayer) { AcCmColor color; color.setColorIndex(m_lstLayer[i]->m_iColor); pLayer->setColor(color); } OPENOBJ_END(); } fclose(fp); CDialog::OnOK(); }