Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/FloorHoleDlg.cpp
T

666 lines
16 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#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();
}