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

667 lines
16 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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();
}