#include "stdafx.h" #include "FloorHoleDlg.h" #include "SelectBlkDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNAMIC(CFloorArcHoleDlg, CDialog) CFloorArcHoleDlg::CFloorArcHoleDlg(CWnd* pParent/* = NULL*/) : CDialog(CFloorArcHoleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CFloorArcHoleDlg) //}}AFX_DATA_INIT m_strSysBlk = _T("TWTSYS(00000515)"); m_sOldDiameter = _T(""); } void CFloorArcHoleDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFloorArcHoleDlg) DDX_Control(pDX, IDC_COMBO_SUPERSCRIPT, m_cmbSuperscript); DDX_Control(pDX, IDC_COMBO_SUBSCRIPT, m_cmbSubscript); DDX_Control(pDX, IDC_COMBO_DIAMETER, m_cmbDiameter); //}}AFX_DATA_MAP } CFloorArcHoleDlg::~CFloorArcHoleDlg() { } BEGIN_MESSAGE_MAP(CFloorArcHoleDlg, CDialog) //{{AFX_MSG_MAP(CFloorArcHoleDlg) ON_WM_CLOSE() ON_BN_CLICKED(IDC_PREVIEW, OnPreview) ON_WM_PAINT() ON_WM_DESTROY() ON_CBN_EDITCHANGE(IDC_COMBO_DIAMETER, OnEditchangeComboDiameter) ON_CBN_SELCHANGE(IDC_COMBO_DIAMETER, OnSelchangeComboDiameter) //}}AFX_MSG_MAP END_MESSAGE_MAP() BOOL CFloorArcHoleDlg::OnInitDialog() { CDialog::OnInitDialog(); return TRUE; } void CFloorArcHoleDlg::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_strSysBlk; 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_strSysBlk = _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 CFloorArcHoleDlg::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 CFloorArcHoleDlg::OnPaint() { CPaintDC dc(this); OpenSlide(); } void CFloorArcHoleDlg::OnEditchangeComboDiameter() { SetSuperscirptVal(); } //cet 2010.1.4 add void CFloorArcHoleDlg::SetSuperscirptVal() { UpdateData(TRUE); CString strText; m_cmbDiameter.GetWindowText(strText); double dW = _tstof(strText); if (dW <= 0.0) { AfxMessageBox(_T("直径输入有误!")); m_cmbDiameter.SetWindowText(m_sOldDiameter); UpdateData(FALSE); return; } m_sOldDiameter = strText; strText = _T("φ") + strText + _T("板洞"); m_cmbSuperscript.SetWindowText(strText); } //cet 2010.1.4 add void CFloorArcHoleDlg::OnSelchangeComboDiameter() { int nIndex = -1; nIndex = m_cmbDiameter.GetCurSel(); if (nIndex != -1) { CString str; m_cmbDiameter.GetLBText(nIndex, str); m_sOldDiameter = str; str = _T("φ") + str + _T("板洞"); m_cmbSuperscript.SetWindowText(str); } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CFloorRectHoleDlg, CDialog) CFloorRectHoleDlg::CFloorRectHoleDlg(CWnd* pParent/* = NULL*/) : CDialog(CFloorRectHoleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CFloorRectHoleDlg) //}}AFX_DATA_INIT m_strSysBlk = _T("TWTSYS(00000552)"); m_sOldH = _T(""); m_sOldW = _T(""); } void CFloorRectHoleDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFloorRectHoleDlg) DDX_Control(pDX, IDC_COMBO_SUPERSCRIPT, m_cmbSuperscript); DDX_Control(pDX, IDC_EDIT_SUBSCRIPT, m_edtSubscript); DDX_Control(pDX, IDC_COMBO_H, m_cmbH); DDX_Control(pDX, IDC_COMBO_W, m_cmbW); //}}AFX_DATA_MAP } CFloorRectHoleDlg::~CFloorRectHoleDlg() { } BEGIN_MESSAGE_MAP(CFloorRectHoleDlg, CDialog) //{{AFX_MSG_MAP(CFloorRectHoleDlg) ON_WM_CLOSE() ON_BN_CLICKED(IDC_PREVIEW, OnPreview) ON_WM_PAINT() ON_WM_DESTROY() ON_CBN_EDITCHANGE(IDC_COMBO_H, OnEditchangeComboH) ON_CBN_SELCHANGE(IDC_COMBO_H, OnSelchangeComboH) ON_CBN_EDITCHANGE(IDC_COMBO_W, OnEditchangeComboW) ON_CBN_SELCHANGE(IDC_COMBO_W, OnSelchangeComboW) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CFloorRectHoleDlg::ModifySuperscript() { UpdateData(TRUE); CString strH, strW; m_cmbH.GetWindowText(strH); double dH = _tstof(strH); if (dH <= 0.0) { AfxMessageBox(_T("洞厚输入有误!")); m_cmbH.SetWindowText(m_sOldH); UpdateData(FALSE); return; } m_cmbW.GetWindowText(strW); double dW = _tstof(strW); if (dW <= 0.0) { AfxMessageBox(_T("洞宽输入有误!")); m_cmbW.SetWindowText(m_sOldW); UpdateData(FALSE); return; } CString strText; strText = strW + _T("×") + strH + _T("板洞"); m_cmbSuperscript.SetWindowText(strText); m_sOldH = strH; m_sOldW = strW; UpdateData(FALSE); } void CFloorRectHoleDlg::OnEditchangeComboH() { ModifySuperscript(); } void CFloorRectHoleDlg::OnSelchangeComboH() { int nIndex = -1; nIndex = m_cmbH.GetCurSel(); if (nIndex == -1) { return; } CString strH, strW; m_cmbH.GetLBText(nIndex, strH); m_sOldH = strH; m_cmbW.GetWindowText(strW); CString strText; strText = strW + _T("×") + strH + _T("板洞"); m_cmbSuperscript.SetWindowText(strText); } void CFloorRectHoleDlg::OnEditchangeComboW() { ModifySuperscript(); } void CFloorRectHoleDlg::OnSelchangeComboW() { int nIndex = -1; nIndex = m_cmbW.GetCurSel(); if (nIndex == -1) { return; } CString strH, strW; m_cmbH.GetWindowText(strH); m_cmbW.GetLBText(nIndex, strW); m_sOldW = strW; CString strText; strText = strW + _T("×") + strH + _T("板洞"); m_cmbSuperscript.SetWindowText(strText); UpdateData(FALSE); } BOOL CFloorRectHoleDlg::OnInitDialog() { CDialog::OnInitDialog(); return TRUE; } void CFloorRectHoleDlg::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_strSysBlk; 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_strSysBlk = _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 CFloorRectHoleDlg::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 CFloorRectHoleDlg::OnPaint() { CPaintDC dc(this); OpenSlide(); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC(CFloorHoleDlg, CModelessDialog) CFloorHoleDlg::CFloorHoleDlg(int iType, CWnd* pParent /*=NULL*/) : CModelessDialog(CFloorHoleDlg::IDD, pParent) { m_bDestroy = FALSE; m_nType = 0; } void CFloorHoleDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFloorHoleDlg) DDX_Control(pDX, IDC_TAB_FLOOR_BASE, m_wndTabLinkType); //}}AFX_DATA_MAP } CFloorHoleDlg::~CFloorHoleDlg() { } BEGIN_MESSAGE_MAP(CFloorHoleDlg, CModelessDialog) //{{AFX_MSG_MAP(CFloorHoleDlg) ON_MESSAGE(WM_ACAD_KEEPFOCUS, onAcadKeepFocus) ON_WM_CLOSE() ON_WM_DESTROY() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_FLOOR_BASE, OnSelchangeTabFloorBase) //}}AFX_MSG_MAP END_MESSAGE_MAP() LONG_PTR CFloorHoleDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { CPoint pt; GetCursorPos(&pt); CRect rc; GetWindowRect(&rc); return (rc.PtInRect(pt) ? TRUE : FALSE); } CString CFloorHoleDlg::getSuperscript() { CString strSuperscript; m_wndArcHoleDlg.m_cmbSuperscript.GetWindowText(strSuperscript); strSuperscript.Replace(_T("φ"),_T("%%c")); return strSuperscript; } CString CFloorHoleDlg::getSubscript() { CString strSubscript; m_wndArcHoleDlg.m_cmbSubscript.GetWindowText(strSubscript); strSubscript.Replace(_T("φ"),_T("%%c")); return strSubscript; } double CFloorHoleDlg::getRadius() { CString str; m_wndArcHoleDlg.m_cmbDiameter.GetWindowText(str); double dRadius = _tstof(str) / 2; return dRadius; } void CFloorHoleDlg::OnClose() { DestroyWindow(); } void CFloorHoleDlg::UpdateDlgData(BOOL bIsRead) { CRegProperty regProp(GetRegLocation(), _T("FloorHoleConfig")); regProp.SetTopRootKey(HKEY_CURRENT_USER); CString strDiameter; CString strSuperscript; CString strSubscript; CString strSuperscript2; CString strSubscript2; CString strH; CString strW; if (bIsRead) { regProp.GetValue(_T("HoleType"), m_nType); if (regProp.GetValue(_T("Diameter"), strDiameter)) { m_wndArcHoleDlg.m_cmbDiameter.SetWindowText(strDiameter); m_wndArcHoleDlg.m_sOldDiameter = strDiameter; } else { m_wndArcHoleDlg.m_cmbDiameter.SetCurSel(0); } if(regProp.GetValue(_T("FloorSuperscript"), strSuperscript)) { m_wndArcHoleDlg.m_cmbSuperscript.SetWindowText(strSuperscript); } else { m_wndArcHoleDlg.m_cmbSuperscript.SetCurSel(0); } if (regProp.GetValue(_T("FloorSubscript"), strSubscript)) { m_wndArcHoleDlg.m_cmbSubscript.SetWindowText(strSubscript); } if(regProp.GetValue(_T("FloorSuperscriptRect"), strSuperscript2)) { m_wndRectHoleDlg.m_cmbSuperscript.SetWindowText(strSuperscript2); } else { m_wndRectHoleDlg.m_cmbSuperscript.SetCurSel(0); } if (regProp.GetValue(_T("FloorSubscriptRect"), strSubscript2)) { m_wndRectHoleDlg.m_edtSubscript.SetWindowText(strSubscript2); } if(regProp.GetValue(_T("FloorRectH"), strH)) { m_wndRectHoleDlg.m_cmbH.SetWindowText(strH); m_wndRectHoleDlg.m_sOldH = strH; } else { m_wndRectHoleDlg.m_cmbH.SetCurSel(2); } if(regProp.GetValue(_T("FloorRectW"), strW)) { m_wndRectHoleDlg.m_cmbW.SetWindowText(strW); m_wndRectHoleDlg.m_sOldH = strW; } else { m_wndRectHoleDlg.m_cmbW.SetCurSel(0); } if (!regProp.GetValue(_T("strBlkName"), m_wndArcHoleDlg.m_strSysBlk) || !regProp.GetValue(_T("strBlkNameRect"), m_wndRectHoleDlg.m_strSysBlk)) { m_wndArcHoleDlg.m_strInsBlkName = _T("TWTSYS(00000515)"); m_wndRectHoleDlg.m_strInsBlkName = _T("TWTSYS(00000552)"); } UpdateData(FALSE); if (m_nType == 1) { m_wndRectHoleDlg.ModifySuperscript(); } } else { UpdateData(TRUE); m_nType = m_wndTabLinkType.GetCurSel(); regProp.SetValue(_T("HoleType"), m_nType); strSuperscript = getSuperscript(); strSuperscript.Replace(_T("%%c"),_T("φ")); regProp.SetValue(_T("FloorSuperscript"), strSuperscript); strSubscript = getSubscript(); strSubscript.Replace(_T("%%c"),_T("φ")); regProp.SetValue(_T("FloorSubscript"), strSubscript); m_wndArcHoleDlg.m_cmbDiameter.GetWindowText(strDiameter); regProp.SetValue(_T("Diameter"),strDiameter); m_wndRectHoleDlg.m_cmbSuperscript.GetWindowText(strSuperscript2); regProp.SetValue(_T("FloorSuperscriptRect"), strSuperscript2); m_wndRectHoleDlg.m_edtSubscript.GetWindowText(strSubscript2); regProp.SetValue(_T("FloorSubscriptRect"), strSubscript2); m_wndRectHoleDlg.m_cmbH.GetWindowText(strH); regProp.SetValue(_T("FloorRectH"), strH); m_wndRectHoleDlg.m_cmbW.GetWindowText(strW); regProp.SetValue(_T("FloorRectW"), strW); regProp.SetValue(_T("strBlkName"), m_wndArcHoleDlg.m_strSysBlk); regProp.SetValue(_T("strBlkNameRect"), m_wndRectHoleDlg.m_strSysBlk); } } BOOL CFloorHoleDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); m_wndTabLinkType.InsertItem(0, _T("圆形楼板洞")); m_wndTabLinkType.InsertItem(1, _T("方形楼板洞")); m_wndArcHoleDlg.Create(IDD_FLOOR_BASE_ARC, &m_wndTabLinkType); m_wndRectHoleDlg.Create(IDD_FLOOR_BASE_RECT, &m_wndTabLinkType); UpdateDlgData(TRUE); acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true); XString xsBlk; XString xsTKName, xsRocord; SplitSlbName(m_wndArcHoleDlg.m_strSysBlk, xsTKName, xsRocord); LoadDwbBlock(xsTKName, xsRocord, xsBlk); m_wndArcHoleDlg.m_strInsBlkName = xsBlk; acDocManager->unlockDocument(curDoc()); m_wndArcHoleDlg.OpenSlide(); acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true); SplitSlbName(m_wndRectHoleDlg.m_strSysBlk, xsTKName, xsRocord); LoadDwbBlock(xsTKName, xsRocord, xsBlk); m_wndRectHoleDlg.m_strInsBlkName = xsBlk; acDocManager->unlockDocument(curDoc()); m_wndRectHoleDlg.OpenSlide(); m_wndTabLinkType.SetCurSel(m_nType); if (m_nType == 0) { m_wndArcHoleDlg.ShowWindow(SW_SHOW); } else { m_wndRectHoleDlg.ShowWindow(SW_SHOW); } CRect rect; m_wndTabLinkType.GetClientRect(&rect); rect.right += 20; m_wndTabLinkType.MoveWindow(&rect); m_wndArcHoleDlg.GetClientRect(&rect); rect.left += 7; rect.top += 25; rect.right += 7; rect.bottom += 25; m_wndArcHoleDlg.MoveWindow(&rect); m_wndRectHoleDlg.GetClientRect (&rect); rect.left += 7; rect.top += 25; rect.right += 7; rect.bottom += 25; m_wndRectHoleDlg.MoveWindow(&rect); UpdateData(FALSE); ModifyWndRect(); m_wndArcHoleDlg.SetSuperscirptVal(); m_wndRectHoleDlg.ModifySuperscript(); return TRUE; } void CFloorHoleDlg::ModifyWndRect() { static CRect rectPipe, rectVPipe; if (rectPipe.IsRectEmpty()) { m_wndRectHoleDlg.GetWindowRect(&rectPipe); m_wndArcHoleDlg.GetWindowRect(&rectVPipe); } switch(m_wndTabLinkType.GetCurSel()) { case 0: { m_wndArcHoleDlg.ShowWindow(SW_SHOW); m_wndRectHoleDlg.ShowWindow(SW_HIDE); // 调整对话框大小,以适应属性页 CRect rect; GetClientRect(&rect); double dW1 = 0.0, dW2 = 0.0, dH1 = 0.0, dH2 = 0.0; dW1 = rectVPipe.Width(); dW2 = rect.Width(); dH1 = rectVPipe.Height(); dH2 = rect.Height(); GetWindowRect(&rect); rect.right += dW1 - dW2 + 25; rect.bottom += dH1 - dH2 + 40; MoveWindow(&rect); // 调整tab大小 m_wndTabLinkType.GetClientRect(&rect); dW1 = rectVPipe.Width(); dW2 = rect.Width(); dH1 = rectVPipe.Height(); dH2 = rect.Height(); rect.left += 5; rect.top += 5; rect.right += dW1 - dW2 + 20; rect.bottom += dH1 - dH2 + 35; m_wndTabLinkType.MoveWindow(&rect); break; } case 1: { m_wndRectHoleDlg.ShowWindow(SW_SHOW); m_wndArcHoleDlg.ShowWindow(SW_HIDE); // 调整对话框大小,以适应属性页 CRect rect; GetClientRect(&rect); double dW1 = 0.0, dW2 = 0.0, dH1 = 0.0, dH2 = 0.0; dW1 = rectPipe.Width(); dW2 = rect.Width(); dH1 = rectPipe.Height(); dH2 = rect.Height(); GetWindowRect(&rect); rect.right += dW1 - dW2 + 25; rect.bottom += dH1 - dH2 + 40; MoveWindow(&rect); // 调整tab大小 m_wndTabLinkType.GetClientRect(&rect); dW1 = rectPipe.Width(); dW2 = rect.Width(); dH1 = rectPipe.Height(); dH2 = rect.Height(); rect.left += 5; rect.top += 5; rect.right += dW1 - dW2 + 20; rect.bottom += dH1 - dH2 + 35; m_wndTabLinkType.MoveWindow(&rect); break; } } } void CFloorHoleDlg::OnDestroy() { m_bDestroy = TRUE; UpdateDlgData(FALSE); CModelessDialog::OnDestroy(); acedPostCommand(_T("\33\33")); } BOOL CFloorHoleDlg::IsDestroy() { return m_bDestroy; } void CFloorHoleDlg::OnSelchangeTabFloorBase(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here UpdateData(TRUE); m_nType = m_wndTabLinkType.GetCurSel(); ModifyWndRect(); *pResult = 0; acedGetAcadDwgView()->SetFocus(); }