292 lines
7.1 KiB
C++
292 lines
7.1 KiB
C++
// LayerDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
//#include <DbObject.h>
|
|
//#include <arxtools.h>
|
|
#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<CLayerData> 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;i<len;i++){
|
|
if(_tcscmp(lstLayer[i]->m_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;i<m_lstLayer.Length();i++){
|
|
CString csCol;
|
|
if(m_lstLayer[i]->m_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();
|
|
}
|