Files
envi-code/SourceCode/Code2026/tg_shs/shs_public/LayerDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

292 lines
7.2 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();
}