434 lines
10 KiB
C++
434 lines
10 KiB
C++
#include "stdafx.h"
|
|
#include "YBSZDlg.h"
|
|
#include "ybsz_modify_Dlg.h"
|
|
#include "CoreTools.h"
|
|
#include "AecDbObjXDataMap.h"
|
|
#include "initools.h"
|
|
|
|
#define INI_FILE _T("\\PipeInit.ini")
|
|
#define DWG_FILE _T("\\PipeInit.dwg")
|
|
|
|
namespace
|
|
{
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CYBSZDlg, CDialog)
|
|
|
|
CYBSZDlg::CYBSZDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CYBSZDlg::IDD, pParent)
|
|
, m_sComboType(_T(""))
|
|
{
|
|
m_sStyleNames.push_back(_T("Layer"));
|
|
m_sStyleNames.push_back(_T("DimStyle"));
|
|
m_sStyleNames.push_back(_T("TextStyle"));
|
|
}
|
|
|
|
CYBSZDlg::~CYBSZDlg()
|
|
{
|
|
}
|
|
|
|
void CYBSZDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_CBString(pDX, IDC_COMBO_STYLE, m_sComboType);
|
|
DDX_Control(pDX, IDC_COMBO_STYLE, m_wndComboType);
|
|
DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd);
|
|
DDX_Control(pDX, IDC_BUTTON_EDIT, m_btnModify);
|
|
DDX_Control(pDX, IDC_BUTTON_DEL, m_btnDel);
|
|
DDX_Control(pDX, IDC_LIST_LAYER, m_ListCtrl);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CYBSZDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BUTTON_ADD, &CYBSZDlg::OnBnClickedBtnAdd)
|
|
ON_BN_CLICKED(IDC_BUTTON_EDIT, &CYBSZDlg::OnBnClickedBtnMod)
|
|
ON_BN_CLICKED(IDC_BUTTON_DEL, &CYBSZDlg::OnBnClickedBtnDel)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_STYLE, &CYBSZDlg::OnCbnSelchangeType)
|
|
ON_BN_CLICKED(IDOK, &CYBSZDlg::OnBnClickedButtonOk)
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_LAYER, &CYBSZDlg::OnDblclkList)
|
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_LAYER, &CYBSZDlg::OnRlclkList)
|
|
ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CYBSZDlg::onAcadKeepFocus)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CYBSZDlg::OnBnClickedOpenTmp)
|
|
END_MESSAGE_MAP()
|
|
|
|
LONG_PTR CYBSZDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR)
|
|
{
|
|
POINT pt;
|
|
::GetCursorPos(&pt);
|
|
CRect rect;
|
|
GetWindowRect(&rect);
|
|
if (!(rect.PtInRect(pt)))
|
|
{
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
// CYBSZDlg message handlers
|
|
|
|
|
|
BOOL CYBSZDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
initCtrls();
|
|
return 0;
|
|
}
|
|
|
|
void CYBSZDlg::initCtrls()
|
|
{
|
|
m_wndComboType.Clear();
|
|
UpdateData(FALSE);
|
|
m_wndComboType.AddString(_T("图层设置"));
|
|
m_wndComboType.AddString(_T("文字样式设置"));
|
|
m_wndComboType.AddString(_T("标注样式设置"));
|
|
m_wndComboType.SetCurSel(0);
|
|
|
|
m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
|
|
m_ListCtrl.EnableToolTips(TRUE);
|
|
CRect rect;
|
|
m_ListCtrl.GetClientRect(&rect);// 获取编程语言列表视图控件的位置和大小
|
|
m_ListCtrl.InsertColumn(0, _T("上华名称"), LVCFMT_LEFT, rect.Width() / 3);
|
|
m_ListCtrl.InsertColumn(1, _T("院标名称"), LVCFMT_LEFT, rect.Width() / 3);
|
|
m_ListCtrl.InsertColumn(2, _T("源名称"), LVCFMT_LEFT, rect.Width() / 3);
|
|
|
|
OnCbnSelchangeType();
|
|
|
|
LOGFONT lf;
|
|
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
|
|
|
|
CClientDC dc(this);
|
|
_tcscpy(lf.lfFaceName, _T("Arial Unicode Ms"));
|
|
lf.lfHeight = -MulDiv(13, GetDeviceCaps(dc.m_hDC, LOGPIXELSY), 72);
|
|
m_font.CreateFontIndirect(&lf);
|
|
|
|
m_btnAdd.SetFont(&m_font);
|
|
m_btnModify.SetFont(&m_font);
|
|
m_btnDel.SetFont(&m_font);
|
|
|
|
m_btnAdd.SetWindowText(_T("✙"));
|
|
m_btnModify.SetWindowText(_T("✎"));
|
|
m_btnDel.SetWindowText(_T("✖"));
|
|
}
|
|
|
|
void CYBSZDlg::OnBnClickedBtnAdd()
|
|
{
|
|
std::vector<CString> vec(0);
|
|
getListContent(vec);
|
|
|
|
CYBSZ_ModifyDlg dlg(_T("添加"), _T("新数据"), _T("新数据"), _T(""), vec);
|
|
if (dlg.DoModal() != IDOK) return;
|
|
Record rc = dlg.getUserInputData();
|
|
if (!m_datas.insert(rc).second)
|
|
{
|
|
AfxMessageBox(_T(""));
|
|
return;
|
|
}
|
|
refreshList();
|
|
}
|
|
|
|
void CYBSZDlg::OnBnClickedBtnMod()
|
|
{
|
|
std::vector<CString> vec(0);
|
|
getListContent(vec);
|
|
|
|
int idx = m_ListCtrl.GetSelectionMark();
|
|
if (idx == -1)
|
|
{
|
|
AfxMessageBox(_T("请选中一行数据!"));
|
|
return;
|
|
}
|
|
CString sCol1 = m_ListCtrl.GetItemText(idx, 0);
|
|
CString sCol2 = m_ListCtrl.GetItemText(idx, 1);
|
|
CString sCol3 = m_ListCtrl.GetItemText(idx, 2);
|
|
|
|
CYBSZ_ModifyDlg dlg(_T("修改"), sCol1, sCol2, sCol3, vec);
|
|
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
Record rc = dlg.getUserInputData();
|
|
#if ARX > 23
|
|
auto pb = m_datas.insert(rc);
|
|
#else
|
|
std::set<Record, Record::_compare_>::_Pairib pb = m_datas.insert(rc);
|
|
#endif
|
|
if (!pb.second)
|
|
{
|
|
const CString &pp(pb.first->_sYuanBiao);
|
|
const_cast<CString&>(pp) = rc._sYuanBiao;
|
|
const CString &bb(pb.first->_sYuan);
|
|
const_cast<CString&>(bb) = rc._sYuan;
|
|
//AfxMessageBox(_T("添加重复"));
|
|
//return;
|
|
}
|
|
refreshList();
|
|
}
|
|
|
|
void CYBSZDlg::OnBnClickedBtnDel()
|
|
{
|
|
if (AfxMessageBox(_T("此操作不可撤销!确认删除吗?"), MB_YESNO) != IDYES)
|
|
return;
|
|
|
|
int idx = m_ListCtrl.GetSelectionMark();
|
|
if (idx == -1)
|
|
{
|
|
AfxMessageBox(_T("请选中一行数据!"));
|
|
return;
|
|
}
|
|
|
|
Record rc;
|
|
rc._sShangHua = m_ListCtrl.GetItemText(idx, 0);
|
|
|
|
std::set<Record, Record::_compare_>::iterator it =m_datas.find(rc);
|
|
m_datas.erase(it);
|
|
|
|
refreshList();
|
|
}
|
|
|
|
void CYBSZDlg::OnCbnSelchangeType()
|
|
{
|
|
int idx = m_wndComboType.GetCurSel();
|
|
if (idx < 0 || idx > 2) return;
|
|
|
|
CString sSection(m_sStyleNames[idx]);
|
|
|
|
CString sPicPath(FilePath::GetSysDir() + INI_FILE);
|
|
if (_taccess(sPicPath, 0x0) != 0x0) return;
|
|
|
|
Ini2Datas(sPicPath, sSection);
|
|
|
|
refreshList();
|
|
|
|
}
|
|
|
|
void CYBSZDlg::OnBnClickedButtonOk()
|
|
{
|
|
int idx = m_wndComboType.GetCurSel();
|
|
if (idx < 0 || idx > 2) return;
|
|
|
|
CString sSection(m_sStyleNames[idx]);
|
|
|
|
CString sPicPath(FilePath::GetSysDir() + INI_FILE);
|
|
if (_taccess(sPicPath, 0x0) != 0x0) return;
|
|
|
|
Datas2Ini(sPicPath, sSection);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CYBSZDlg::OnDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
OnBnClickedBtnMod();
|
|
}
|
|
|
|
void CYBSZDlg::OnRlclkList(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
CPoint pt;
|
|
::GetCursorPos(&pt);
|
|
|
|
CMenu menu;
|
|
menu.CreatePopupMenu();
|
|
menu.AppendMenu(MF_BYCOMMAND | MF_STRING | MF_ENABLED, ID_YBSZ_MODIFY, _T("修改(&M)"));
|
|
menu.AppendMenu(MF_BYCOMMAND | MF_STRING | MF_ENABLED, ID_YBSZ_DELETE, _T("删除(&D)"));
|
|
int nID = menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, this);
|
|
|
|
switch (nID)
|
|
{
|
|
case ID_YBSZ_MODIFY:
|
|
{
|
|
OnBnClickedBtnMod();
|
|
break;
|
|
}
|
|
case ID_YBSZ_DELETE:
|
|
{
|
|
OnBnClickedBtnDel();
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CYBSZDlg::Ini2Datas(LPCTSTR pszIni, LPCTSTR pszSection)
|
|
{
|
|
|
|
if (!pszIni || !pszSection) return;
|
|
|
|
SH_BIM_BLOCK blk;
|
|
blk.clear();
|
|
IniTools::getSectionContent(pszIni, pszSection, blk);
|
|
|
|
CString sCol1(_T("")), sCol2(_T("")), sCol3(_T(""));
|
|
std::vector<CString> vec;
|
|
|
|
m_datas.clear();
|
|
|
|
Record rc;
|
|
for (size_t i(0); i < blk.size(); ++i)
|
|
{
|
|
vec.clear();
|
|
SH_BIM_REC &rec(blk[i]);
|
|
sCol1 = rec.first;
|
|
CoreTools::SplitString(rec.second, _T(':'), vec);
|
|
if (vec.size() > 1)
|
|
{
|
|
sCol2 = vec[0];
|
|
sCol3 = vec[1];
|
|
|
|
sCol2.TrimLeft(_T(" "));
|
|
sCol2.TrimRight(_T(" "));
|
|
|
|
sCol3.TrimLeft(_T(" "));
|
|
sCol3.TrimRight(_T(" "));
|
|
}
|
|
// 填充列表
|
|
rc._sShangHua = sCol1;
|
|
rc._sYuanBiao = sCol2;
|
|
rc._sYuan = sCol3;
|
|
|
|
m_datas.insert(rc);
|
|
}
|
|
}
|
|
|
|
void CYBSZDlg::Datas2Ini(LPCTSTR pszIni, LPCTSTR pszSection)
|
|
{
|
|
std::map<CString, CString> mm;
|
|
std::set<Record, Record::_compare_>::const_iterator it(m_datas.begin());
|
|
for (; it != m_datas.end(); ++it)
|
|
{
|
|
const Record &rc(*it);
|
|
mm.insert(std::make_pair(rc._sShangHua, rc._sYuanBiao + _T(":") + rc._sYuan));
|
|
}
|
|
IniTools::setSectionContent(pszIni, pszSection, mm);
|
|
}
|
|
|
|
void CYBSZDlg::refreshList()
|
|
{
|
|
m_ListCtrl.DeleteAllItems();
|
|
std::set<Record, Record::_compare_>::const_iterator it(m_datas.begin());
|
|
for (int i(0); it != m_datas.end(); ++it, ++i)
|
|
{
|
|
const Record &rc(*it);
|
|
|
|
m_ListCtrl.InsertItem(i, rc._sShangHua);
|
|
m_ListCtrl.SetItemText(i, 1, rc._sYuanBiao);
|
|
m_ListCtrl.SetItemText(i, 2, rc._sYuan);
|
|
}
|
|
}
|
|
|
|
#define READ_DbTable(tableName)\
|
|
{\
|
|
recordNames.clear();\
|
|
AcDbDatabase *pSrcDb = new AcDbDatabase(false);\
|
|
if (pSrcDb->readDwgFile(FilePath::GetSysDir() + _T("\\PipeInit.dwg")) == Acad::eOk)\
|
|
{\
|
|
AcDb##tableName##Table *pTbl(NULL);\
|
|
pSrcDb->get##tableName##Table(pTbl, AcDb::kForRead);\
|
|
if (pTbl)\
|
|
{\
|
|
AcDb##tableName##TableIterator *pItr(NULL);\
|
|
AcDb##tableName##TableRecord *pRcd(NULL);\
|
|
pTbl->newIterator(pItr);\
|
|
if (pItr)\
|
|
{\
|
|
for (pItr->start(); !pItr->done(); pItr->step())\
|
|
{\
|
|
if (pItr->getRecord(pRcd, AcDb::kForRead) == Acad::eOk)\
|
|
{\
|
|
AcString StyleName(_T(""));\
|
|
pRcd->getName(StyleName);\
|
|
if (!StyleName.isEmpty())\
|
|
recordNames.push_back((LPCTSTR)StyleName);\
|
|
pRcd->close();\
|
|
}\
|
|
}\
|
|
DELETE_PTR(pItr);\
|
|
}\
|
|
pTbl->close();\
|
|
}\
|
|
DELETE_PTR(pSrcDb);\
|
|
}\
|
|
}
|
|
|
|
|
|
void CYBSZDlg::getListContent(std::vector<CString> &recordNames)
|
|
{
|
|
|
|
CString sFile(FilePath::GetSysDir() + _T("\\PipeInit.dwg"));
|
|
int idx = m_wndComboType.GetCurSel();
|
|
if (idx == LB_ERR) return;
|
|
|
|
if (idx == 0)
|
|
READ_DbTable(Layer)
|
|
else if (idx == 1)
|
|
READ_DbTable(TextStyle)
|
|
else
|
|
READ_DbTable(DimStyle)
|
|
|
|
}
|
|
|
|
CYBSZDlg g_ybszDlg;
|
|
void CYBSZDlg::YBSZ()
|
|
{
|
|
//读取 PipeInit.ini 文件
|
|
//界面用 supergrid 控件
|
|
//院标模板
|
|
//图层样式
|
|
//标注样式
|
|
//文字样式
|
|
|
|
//界面------------------------------------------------------------------------------
|
|
// 注意: 院标名称(可改) 源名称 不可以同名!!!!!
|
|
//图层样式
|
|
// |
|
|
// +------上华名称(不可改) 院标名称(可改) 源名称(不可改名,从pipeinit.dwg中选)
|
|
//
|
|
//标注样式
|
|
// |
|
|
// +------上华名称(不可改) 院标名称(可改) 源名称(不可改名,从pipeinit.dwg中选)
|
|
//
|
|
//文字样式
|
|
// |
|
|
// +------上华名称(不可改) 院标名称(可改) 源名称(不可改名,从pipeinit.dwg中选)
|
|
|
|
CAcModuleResourceOverride myResources;
|
|
if (!::IsWindow(g_ybszDlg.m_hWnd))
|
|
g_ybszDlg.Create(CYBSZDlg::IDD);
|
|
|
|
g_ybszDlg.ShowWindow(SW_SHOW); g_ybszDlg.CenterWindow();
|
|
}
|
|
|
|
|
|
typedef struct OpenFileParam3
|
|
{
|
|
TCHAR szDwgFile[MAX_PATH];
|
|
CWnd *pParent;
|
|
}OPENFILEPARAM;
|
|
|
|
static void OpenDwgFile(void *pData)
|
|
{
|
|
OpenFileParam3 *pParam = (OpenFileParam3 *)pData;
|
|
AcApDocument *pDoc = acDocManager->curDocument();
|
|
if (acDocManager->isApplicationContext())
|
|
{
|
|
#if ARX < 21
|
|
acDocManager->pushResourceHandle(acedGetAcadResourceInstance());
|
|
#endif
|
|
acDocManager->appContextOpenDocument(pParam->szDwgFile);
|
|
acDocManager->popResourceHandle();
|
|
}
|
|
}
|
|
|
|
void CYBSZDlg::OnBnClickedOpenTmp()
|
|
{
|
|
CString sTmplDwg = _T("\\PipeInit.dwg");
|
|
CString sDwgFile = FilePath::GetSysDir() + sTmplDwg;
|
|
|
|
CFileFind fd;
|
|
if (fd.FindFile(sDwgFile))
|
|
{
|
|
static OpenFileParam3 param;
|
|
memset(¶m, 0, sizeof(OpenFileParam3));
|
|
|
|
_tcscpy(param.szDwgFile, sDwgFile);
|
|
param.pParent = acedGetAcadFrame();
|
|
acDocManager->executeInApplicationContext(OpenDwgFile, (void *)¶m);
|
|
}
|
|
} |