#include "stdafx.h" #include "BaseHoleDlg.h" #include "SelectBlkDlg.h" #include "BaseHoleOperation.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //基础洞命令实现函数 void InsHole() { CTemporaryResourceOverride vTemp; //打开基础洞设置对话框 CBaseHoleDlg baseHoleDlg(0,acedGetAcadFrame()); baseHoleDlg.Create(IDD_BASE_HOLE); baseHoleDlg.ShowWindow(SW_SHOW); //执行基础洞命令 CBaseHoleOperation baseHoleOperation; baseHoleOperation.RunBaseHole(baseHoleDlg); if (!baseHoleDlg.IsDestroy()) { baseHoleDlg.DestroyWindow(); } } IMPLEMENT_DYNAMIC(CBaseHoleDlg, CModelessDialog) CBaseHoleDlg::CBaseHoleDlg(int iType, CWnd* pParent /*=NULL*/) : CModelessDialog(CBaseHoleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CBaseHoleDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_strSysBlk1 = _T("TWTSYS(00000512)"); m_strSubscript = _T(""); m_strSuperscript= _T(""); m_bDestroy = FALSE; } CBaseHoleDlg::~CBaseHoleDlg() { } void CBaseHoleDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBaseHoleDlg) DDX_Control(pDX, IDC_COMBO_SUBSCRIPT, m_cmbSubscript); DDX_Control(pDX, IDC_COMBO_SUPERSCRIPT, m_cmbSuperscript); DDX_Control(pDX, IDC_COMBO_HOLEWIDTH, m_cmbHoleWidth); DDX_Control(pDX, IDC_COMBO_HOLEHIGH, m_cmbHoleHigh); DDX_Control(pDX, IDC_COMBO_BOTTOMHIGH, m_cmbBottomHigh); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBaseHoleDlg, CModelessDialog) //{{AFX_MSG_MAP(CBaseHoleDlg) ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus) ON_WM_CLOSE() ON_BN_CLICKED(IDC_PREVIEW, OnPreview) ON_WM_PAINT() ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() LONG_PTR CBaseHoleDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { CPoint pt; GetCursorPos(&pt); CRect rc; GetWindowRect(&rc); return (rc.PtInRect(pt) ? TRUE : FALSE); } double CBaseHoleDlg::getHoleWidth() { double dRet = 0.0; CString strData; m_cmbHoleWidth.GetWindowText(strData); dRet = _tstof(strData); return dRet; } double CBaseHoleDlg::getHoleHigh() { double dRet = 0.0; CString strData; m_cmbHoleHigh.GetWindowText(strData); dRet = _tstof(strData); return dRet; } double CBaseHoleDlg::getBottomHigh() { double dRet = 0.0; CString strData; m_cmbBottomHigh.GetWindowText(strData); dRet = _tstof(strData); return dRet; } BOOL CBaseHoleDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); UpdateDlgData(TRUE); acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true); XString xsBlk; XString xsTKName, xsRocord; SplitSlbName(m_strSysBlk1, xsTKName, xsRocord); LoadDwbBlock(xsTKName, xsRocord, xsBlk); m_strInsBlkName = xsBlk; acDocManager->unlockDocument(curDoc()); OpenSlide(); return TRUE; } void CBaseHoleDlg::UpdateDlgData(BOOL bIsRead) { CRegProperty regProp(GetRegLocation(), _T("BaseHoleConfig")); regProp.SetTopRootKey(HKEY_CURRENT_USER); if (bIsRead) { CString strHoleWidth, strHoleHigh, strBottomHigh; CString strSuperscript; CString strSubscript; if(regProp.GetValue(_T("HoleWidth"), strHoleWidth)) { m_cmbHoleWidth.SetWindowText(strHoleWidth); } else { m_cmbHoleWidth.SetCurSel(0); } if (regProp.GetValue(_T("HoleHigh"), strHoleHigh)) { m_cmbHoleHigh.SetWindowText(strHoleHigh); } else { m_cmbHoleHigh.SetCurSel(0); } if (regProp.GetValue(_T("BottomHigh"), strBottomHigh)) { m_cmbBottomHigh.SetWindowText(strBottomHigh); } else { m_cmbBottomHigh.SetCurSel(0); } if (regProp.GetValue(_T("Superscript"), strSuperscript)) { m_cmbSuperscript.SetWindowText(strSuperscript); } else { m_cmbSuperscript.SetCurSel(0); } if (regProp.GetValue(_T("Subscript"), strSubscript)) { m_cmbSubscript.SetWindowText(strSubscript); } else { m_cmbSubscript.SetWindowText(_T("")); } if (!regProp.GetValue(_T("strBlkName"), m_strSysBlk1)) { m_strSysBlk1 = _T("TWTSYS(00000512)"); } UpdateData(FALSE); } else { UpdateData(TRUE); regProp.SetValue(_T("HoleWidth"), getHoleWidth()); regProp.SetValue(_T("HoleHigh"), getHoleHigh()); regProp.SetValue(_T("BottomHigh"), getBottomHigh()); regProp.SetValue(_T("Superscript"), getSuperscript()); regProp.SetValue(_T("Subscript"), getSubscript()); regProp.SetValue(_T("strBlkName"), m_strSysBlk1); } } void CBaseHoleDlg::OnClose() { DestroyWindow(); } void CBaseHoleDlg::OnPreview() { UpdateData(); CTemporaryResourceOverride vTemp; CSelectBlkDlg dlg; dlg.m_csTkName = _T("TWTSYS"); dlg.m_csType = _T("基础洞"); CWnd *pWnd = GetDlgItem(IDC_PREVIEW); CRect rect; dlg.m_staticSlide.m_csCurRecord = m_strSysBlk1; pWnd->GetWindowRect(&rect); dlg.m_ptBase = rect.TopLeft(); if(dlg.DoModal() == IDOK) { CString strRet = dlg.m_staticSlide.m_csCurRecord; CString strDes = dlg.m_staticSlide.m_csCurDesName; m_strSysBlk1 = _tcsrchr(strRet,_T('\\'))+1; XString xsTKName, xsRocord; SplitSlbName(strRet, xsTKName, xsRocord); acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true); XString xsBlk; LoadDwbBlock(xsTKName, xsRocord, xsBlk); m_strInsBlkName = xsBlk; acDocManager->unlockDocument(curDoc()); OpenSlide(); } } void CBaseHoleDlg::OpenSlide() { UpdateData(TRUE); CWnd *pImageBox = GetDlgItem(IDC_PREVIEW); CString strTKName, strRocord; CString strSlb; SplitBlkStr(m_strInsBlkName, strTKName, strRocord); strSlb.Format(_T("%s(%s)"), strTKName, strRocord); DrawSlide((const TCHAR*)strSlb, pImageBox); } void CBaseHoleDlg::OnPaint() { CPaintDC dc(this); OpenSlide(); } CString CBaseHoleDlg::getSuperscript() { UpdateData(TRUE); CString strSuperscript = _T(""); m_cmbSuperscript.GetWindowText(strSuperscript); return strSuperscript; } CString CBaseHoleDlg::getSubscript() { UpdateData(TRUE); CString strSubscript = _T(""); m_cmbSubscript.GetWindowText(strSubscript); return strSubscript; } void CBaseHoleDlg::OnDestroy() { UpdateDlgData(FALSE); m_bDestroy = TRUE; CModelessDialog::OnDestroy(); acedPostCommand(_T("\33\33")); } BOOL CBaseHoleDlg::IsDestroy() { return m_bDestroy; }